重复行的MYSQL复杂更新

时间:2013-08-12 12:11:49

标签: mysql sql duplicates

我有一个非常复杂的表格,如下所示: -

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 个答案:

答案 0 :(得分:0)

假设UNIQUE约束已打开(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;

这应该在临时表中提供所需的结果,然后你可以截断your_table并从temp中插入数据。

您也可以使用普通表而不是临时表,并在最后交换它们。

相关问题