MySQL 比较两个表,并使用转置的选择结果更新第二个表



我构造了以下两个表:

+---------------+---------------+ |name_i |价值 | +---------------+---------------+ |name_1 |ASDF | |name_1 |FDSD | |name_1 |FSFD | |name_2 |FFFF | |name_3 |艾尔夫 | |name_3 |EWRW | |name_4 |雷 | |name_5 |WR4e | +---------------+---------------+ +---------------+---------------+---------------+---------------+ |name_id |专栏1 |列 2 |列 3 | +---------------+---------------+---------------+---------------+ |name_1 |空 |空 |空 | |name_2 |空 |空 |空 | |name_3 |空 |空 |空 | |name_4 |空 |空 |空 | |name_5 |空 |空 |空 | +---------------+---------------+---------------+---------------+

我想转置第一个表中的值,并根据比较其name_id列的结果更新第二个表。对于那些值少于 3 的name_id,其余的可以保留在第二个表上NULL。所以最后我的表格应该看起来像这样:

+---------------+---------------+---------------+---------------+ |name_id |专栏1 |列 2 |列 3 | +---------------+---------------+---------------+---------------+ |name_1 |ASDF |FDSD |FSFD | |name_2 |FFFF |空 |空 | |name_3 |艾尔夫 |EWRW |null | |name_4 |雷 |空 |空 | |name_5 |WR4e |空 |空 | +---------------+---------------+---------------+---------------+

知道如何在mysql中执行此操作吗?我在这方面真的很新,但我猜需要一个合适的 for 循环。为了方便起见,我自己构建了第二个表,但如果有一种方法可以直接使用适当的值构造它,那对我来说很好。

在一个查询中,它将是

UPDATE table2 SET 
column1 = (SELECT `value` FROM table1 WHERE name_i = name_id LIMIT 1), 
column2 = (SELECT `value` FROM table1 WHERE name_i = name_id LIMIT 1,1),
column3 = (SELECT `value` FROM table1 WHERE name_i = name_id LIMIT 2,1)

请注意它仅适用于 3 列结构。如果需要,可以添加更多。 它相对较慢,但就您使用 30000 条记录而言 - 不会太多

UPD这个会更快

UPDATE table2 
LEFT JOIN table1 a ON a.name_i = name_id 
LEFT JOIN table1 b ON a.name_i=b.name_i AND a.value != b.value 
LEFT JOIN table1 c ON a.name_i=c.name_i AND a.value != c.value AND b.value != c.value 
SET 
column1 = a.value,
column2 = b.value,
column3 = c.value

相关内容

  • 没有找到相关文章

最新更新