2012-08-08 61 views
1

我想運行一個SQL查詢來更新表,如果一個ID不存在於另一個表中。 繼承人的查詢:在本地服務器上工作但不在我的實時服務器上的SQL語法?

UPDATE product 
SET active = 0 
WHERE id NOT IN (SELECT product_id FROM image); 

如預期在我的本地服務器上的此查詢的工作(運行的Apache/MySQL的)。 但我的專用服務器上(也運行的Apache/MySQL的),它只是返回這個:

Query OK, 0 rows affected (0.19 sec) 
Rows matched: 0 Changed: 0 Warnings: 0 

但我知道它應該影響某些行。

我已經雙重檢查了一切,但看不到爲什麼查詢不會正確通過。 有沒有我錯過了某種設置?

親切的問候, 丹尼爾

回答

2

你有一些行,其中的product_id爲空?使用NOT IN時,必須過濾這些了:

UPDATE product 
SET active = 0 
WHERE id NOT IN (SELECT product_id FROM image WHERE product_id IS NOT NULL); 

的原因是x NOT IN y只能falseNULL,但從來沒有true如果y包含NULL值。


您也可以使用其他方法之一來查找發生在一個表中,但不是在另一個值。例如,使用EXISTS:

UPDATE product 
SET active = 0 
WHERE NOT EXISTS (SELECT * FROM image WHERE product_id = product.id); 

此方法與NULL值沒有相同的問題。

+0

那麼,他們不存在,這就是我想要獲取。 – Vanchi 2012-08-08 10:44:32

+0

@DanielRunnakkoLöfgren:您是否嘗試運行我發佈的查詢?它給了你想要的結果嗎? – 2012-08-08 10:50:48

+0

我的不好。你查詢完成了這項工作。感謝您的回覆! – Vanchi 2012-08-08 11:10:19

相關問題