Mysql:使用来自多个列的值更新一列的值
我的数据库中有大约12个表格,列数很多。我想从他们那里挑选我需要的信息,并将其放入具有预定义结构的新表中。所有表都有一个唯一的标识符“ID”。Mysql:使用来自多个列的值更新一列的值
newtable的结构:
ID |苹果|香蕉|黄瓜|日期
table1的结构
ID | chiquita | grannysmith | IDontWanthis | OrThis
使用:
UPDATE newtable SET bananas = (SELECT chiquita FROM table1
WHERE newtable.ID = table1.ID)
我有困难,但是当更多的列可包含的一条信息,我需要填写新列。
我想:
UPDATE newtable SET apples = (SELECT grannysmith FROM table1
WHERE newtable.ID = table1.ID)
,然后一个新的更新:
UPDATE newtable SET apples = (SELECT elstar FROM table2
WHERE newtable.ID = table2.ID
AND newtable.apples IS NULL)
然而,取代在table2.elstar,不仅NULL值newtable.apples所有的值。先前填入的值现在为NULL。
我对SQL很陌生,不知道自己做错了什么。 有没有更有效的方法来做到这一点? 感谢您的支持!
UPDATE newtable SET apples = (SELECT elstar FROM table2
WHERE newtable.ID = table2.ID
AND newtable.apples IS NULL)
WHERE apples IS NULL
你需要一个where
子句中的外部查询来过滤apples is null
为好。
你应该更好地利用JOIN
:
http://sqlfiddle.com/#!9/f3dda/1
UPDATE newtable n
INNER JOIN table1 t
ON n.id = t.id
SET n.bananas = t.chiquita, n.apples = t.grannysmith
,如果你想避免newtable
覆盖旧值可以改变ON
条款,如:
UPDATE newtable n
INNER JOIN table1 t
ON n.id = t.id AND (n.bananas IS NULL OR n.apples IS NULL)
SET n.bananas = t.chiquita, n.apples = t.grannysmith
UPDATE即使你只想更新一个c olumn每次JOIN
是从性能角度来看是更可取的方法:
UPDATE newtable n
INNER JOIN table1 t
ON n.id = t.id AND n.bananas IS NULL
SET n.bananas = t.chiquita
如果我需要更新多个表中的一列(=执行多个连接),这不起作用。最后一张桌子将重新编写剩下的桌子。 – zufanka
多个'JOINs'确实有效。您可以指定要更改的表格。 –
谢谢,这是诀窍!你能否详细说明一下?第二个“WHERE”背后的逻辑是什么? – zufanka
原因是,外部查询不知道哪些行要更新与'where'条件。因此你必须在外部查询中指定'where'。 –