我有一个非常复杂的表格,如下所示:-
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;
但它不起作用。谁能帮帮我。
最佳答案
假设 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 并插入临时表中的数据。
您还可以使用普通表代替临时表,并在最后交换它们。
关于MYSQL 重复行的复杂更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18186676/