MySql XOR更新 - 比较行和更新值

时间:2013-06-12 16:16:04

标签: mysql sqlite sql-update

SELECT * FROM products where [...]

将返回2个以上的条目:

+------------+-------------+
| product_id | provider_id |
+------------+-------------+
| 0000001    |      NULL   |
+------------+-------------+
| 0000004    |      0032   |
+------------+-------------+
| 0000009    |      NULL   |
+------------+-------------+

我正在寻找(如果存在)MySQL命令,将 provider_id 非空行填充到其他 NULL < /强>:

+------------+-------------+
| product_id | provider_id |
+------------+-------------+
| 0000001    |      0032   |
+------------+-------------+
| 0000004    |      0032   |
+------------+-------------+
| 0000009    |      0032   |
+------------+-------------+

可以通过发出几个查询执行来在PHP中完成。但我愿意用最少的PHP代码处理和大多数MySQL / SQLite处理它。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

一种简单的方法:

UPDATE products SET provider_id = (SELECT provider_id FROM products WHERE [...])
WHERE [...] -- same condition here
AND provider_id IS NULL -- this is probably useless

这假设原始查询中只有一行(provider_id IS NOT NULL)。否则它将失败并显示错误消息(并且不执行任何操作)。