2014-01-24 114 views
0

我有一個數據庫有一些來自外部源的數據,還有一些數據來自本地手動輸入。通過多個表進行SQL更新

有一個items表,主要產品信息。此表包含一個source列以顯示它是手動輸入還是外部輸入。如果是手動的,則source列將爲NULL - 否則,它是外部源中項目的唯一ID。

還有一個images表,item_id列與items表的ID關聯。外部圖像還會將source設置爲該項目的唯一ID,並且item_id將暫時設置爲相同的唯一ID。

問題出在這裏:在我進行外部數據刷新之後,我需要更新本地映像表並將images.item_id設置爲本地表中的項目ID。我做了這樣的查詢:

UPDATE image_table 
SET image_table.item_id = 
(SELECT id from items WHERE items.source = image_table.source AND items.source IS NOT NULL) 

我想到這僅僅更新那些圖像,其中在items表中的行NOT NULL - 不過,雖然它的作品如預期的外部信息,還設置本地圖像item_id爲0.

有沒有更好的方法來做到這一點?

回答

0

您需要在UPDATE查詢中使用WHERE條件,而不是在子查詢中。否則,無論您的子查詢的結果如何,表都會更新。

例如:

UPDATE `image_table` 
SET `image_table`.`item_id` = 
(SELECT `id` FROM `items` WHERE `items`.`source` = `image_table`.`source` 
         AND `items`.`source` IS NOT NULL) 
WHERE EXISTS (SELECT id FROM `items` WHERE `items`.`source` = `image_table`.`source` 
         AND `items`.`source` IS NOT NULL) 

有可能是一個更好的辦法,不包含兩個相同的子查詢......但是,這是我腦海的第一件事。

有一個備選答案在這裏,我覺得 - update table with data from other table if not null?

UPDATE 
`image_table` INNER JOIN `items` ON `image_table`.`source` = `items`.`source` 
SET `image_table`.`item_id` = `items`.`id` 
WHERE `items`.`source` IS NOT NULL 
+0

這是它。謝謝! – user101289