0
SELECT * FROM products where [...]

2 つ以上のエントリを返します:

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

null ではない行からprovider_idを他のNULLに設定する MySQL コマンドを (存在する場合) 探しています。

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

いくつかのクエリ実行を発行することにより、PHPで確実に実行できます。しかし、PHP コードでの処理を最小限に抑え、MySQL/SQLite での処理を最大限に活用して、きちんとしたものにしたいと考えています。

助けてくれてありがとう!

4

1 に答える 1

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

これは、元のクエリで ( ) を含む行が 1 つだけであることを前提としてprovider_id IS NOT NULLいます。それ以外の場合は、エラー メッセージが表示されて失敗します (何もしません)。

于 2013-06-12T16:30:28.070 に答える