我构建了以下两个表:
+---------------+---------------+ | name_i | value | +---------------+---------------+ | name_1 | asdf | | name_1 | fdsd | | name_1 | fsfd | | name_2 | ffff | | name_3 | erfe | | name_3 | ewrw | | name_4 | wree | | name_5 | wr4e | +---------------+---------------+ +---------------+---------------+---------------+---------------+ | name_id | column1 | column2 |column3 | +---------------+---------------+---------------+---------------+ | name_1 | null | null |null | | name_2 | null | null |null | | name_3 | null | null |null | | name_4 | null | null |null | | name_5 | null | null |null | +---------------+---------------+---------------+---------------+
我希望转换第一个表中的值,并根据比较其name_id
列的结果更新第二个值。对于那些值小于3的name_id
,其余值可以在第二个表上保留NULL
。所以最后我的表应该是这样的:
+---------------+---------------+---------------+---------------+ | name_id | column1 | column2 |column3 | +---------------+---------------+---------------+---------------+ | name_1 | asdf | fdsd |fsfd | | name_2 | ffff | null |null | | name_3 | erfe | ewrw |null | | name_4 | wree | null |null | | name_5 | wr4e | null |null | +---------------+---------------+---------------+---------------+
知道如何在mysql中执行此操作吗?我真的很新,但我猜测需要一个合适的循环。为方便起见,我自己构建了第二个表,但是如果有一种方法可以直接用适当的值构建它,那对我来说就没问题了。
答案 0 :(得分:2)
在一个查询中,它将是
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