当前位置: 首页 > 知识库问答 >
问题:

重复行的MYSQL复杂更新

柳昊焱
2023-03-14

我有一张非常复杂的表格,是这样的:-

Snos   Column1 Column2 Column3 Column4 Column5 Column6
1      AD       AD1     C1      2011    P1     6435200
2      AD       AD1     C1      2010    P1     234
3      AD       AD1     C1      2009    P1     6435
4      BD       AD2     C2      2010    P2     198448333
5      CD       AD3     C3      2011    P3     194414870

现在,我需要处理一个应该重复一行的查询,其中假设p2、p3或p1、p2甚至仅p2值对于该特定年份或从2009年、2010年或2011年中的任何一年都不可用,并将最后一列的值作为零放入其中。

所以现在我的数据库看起来应该像-

Snos   Column1 Column2 Column3 Column4 Column5 Column6
1      AD       AD1     C1      2011    P1     6435200
2      AD       AD1     C1      2010    P1     234
3      AD       AD1     C1      2009    P1     6435
4      AD       AD1     C1      2011    P2     0
5      AD       AD1     C1      2010    P2     0
6      AD       AD1     C1      2009    P2     0
7      AD       AD1     C1      2011    P3     0
8      AD       AD1     C1      2010    P3     0
9      AD       AD1     C1      2009    P3     0
10     BD       AD2     C2      2010    P2     198448333
11     BD       AD2     C2      2009    P2     0
12     BD       AD2     C2      2011    P2     0
13     BD       AD2     C2      2010    P1     0
14     BD       AD2     C2      2009    P1     0
15     BD       AD2     C2      2011    P1     0
16     BD       AD2     C2      2010    P3     0
17     BD       AD2     C2      2009    P3     0
18     BD       AD2     C2      2011    P3     0
19     CD       AD3     C3      2011    P3     194414870
20     CD       AD3     C3      2009    P3     0
21     CD       AD3     C3      2010    P3     0
22     CD       AD3     C3      2011    P1     0
23     CD       AD3     C3      2009    P1     0
24     CD       AD3     C3      2010    P1     0
25     CD       AD3     C3      2011    P2     0
26     CD       AD3     C3      2009    P2     0
27     CD       AD3     C3      2010    P2     0

我试着使用临时表


    CREATE TEMPORARY TABLE tmptable_1 SELECT * FROM table WHERE *Some Condition*;
    Some If Else
    Then
    UPDATE tmptable_1 SET Column6 = 0;
    INSERT INTO table SELECT * FROM tmptable_1;
    DROP TEMPORARY TABLE IF EXISTS tmptable_1;

但它不起作用。有谁能帮我。

共有1个答案

林雅畅
2023-03-14

假设UNIQUE约束是on(Column1、Column2、Column3、Column4、Column5)

CREATE TEMPORARY TABLE tmp LIKE your_table;

INSERT IGNORE INTO tmp (Column1,Column2,Column3,Column4,Column5,Column6)
SELECT t1.Column1,t2.Column2,t3.Column3,t4.Column4,t5.Column5, 0
FROM 
    (SELECT DISTINCT Column1 FROM your_table) as t1,
    (SELECT DISTINCT Column2 FROM your_table) as t2, 
    (SELECT DISTINCT Column2 FROM your_table) as t2, 
    (SELECT DISTINCT Column4 FROM your_table) as t4,
    (SELECT DISTINCT Column5 FROM your_table) as t5;

UPDATE tmp JOIN your_table ON
    tmp.Column1 = your_table.Column1
    tmp.Column2 = your_table.Column2 AND
    tmp.Column3 = your_table.Column3 AND
    tmp.Column4 = your_table.Column4 AND
    tmp.Column5 = your_table.Column5 AND
SET tmp.Column6 = your_table.Column6;

这将在temp表中给出所需的结果,然后可以截断your_table并插入来自temp的数据。

您也可以使用一个普通的表来代替temp,并在结束时交换它们。

 类似资料:
  • 招呼: 我认为我没有正确更新我的复杂状态: 如何正确更新此状态?谢谢 https://codesandbox.io/s/intelligent-ellis-qi97k?file=/src/App.js

  • 问题内容: 我有一个注释表,其结构如下: 我有很多重复的评论,名字和电子邮件都一样。我需要删除它们,有人可以建议我如何使用一个查询来实现此目标吗? 谢谢 问题答案:

  • 我有一张非常复杂的表格,是这样的:- 现在,我需要处理一个查询,该查询应该重复一个行,其中假设p2值对于该特定年份或从2009年、2010年或2011年中的任何年份都不可用,并将最后一列的值作为零放入其中。 所以现在我的数据库看起来应该像- 我试着使用临时表 但它不起作用。有谁能帮我。

  • 问题:哪一个复杂性有我的作用?如何找出算法的时间复杂度? 该函数检查给定的int数组是否已排序。 我的代码:

  • 问题内容: 这个问题已经在这里有了答案 : 如何将mysql更改为mysqli? (11个答案) 3年前关闭。 因此,由于不推荐使用MYSQL,并且eveyone不断告诉我进行更新,所以我认为这是我做的时间。 但是由于我不习惯mysqli_ *,对我来说似乎有些陌生。当我用Mysql编码整个网站时,这不是一个简单的编辑。 所以我想知道:如何将以下代码转换为Mysqli?只是为了给我和其他任何人一个

  • 尽管函数转换成成员函数的过程是机械式的,但还是有一些古怪的地方。例如,after函数对两个Time对象进行操作,而不仅仅是一个,我们不能使它俩都成为隐式的。而需要在其中一个对象上调用这个函数,并把另一个对象作为参数传递给它。 在函数中,我们隐式地引用其中一个对象,而继续使用点符号来访问另一对象的实例变量。 bool Time::after (const Time& time2) const{