2012-03-29 101 views
2

我想通過檢查兩個連接表來更新列的狀態。即使我沒有得到一個錯誤。該柱未更新。我想採取一般blockplot id並查看是否有匹配和/或容器的事務。如果有交易但沒有容器,我需要將其標記爲P.mysql 3表加入更新

UPDATE (general 
LEFT JOIN 
transactions 
ON 
general.blockplotid=transactions.blockplotid) 
LEFT JOIN 
container 
ON 
general.blockplotid=container.blockplotid 
SET general.lotstatus = 'P' 
WHERE general.lotstatus != 'U' AND 
transactions.id_transaction IS NOT NULL AND 
container.id_container IS NULL 

因此,總結一下,我有3個表格。我只想在一張桌子上更新一個柱子。我想檢查其他兩個表中的值,它們的值取決於設定值。這三個表與外鍵的主鍵連接。

當我做一個雙連接選擇語句。查詢似乎是正確的。

SELECT transactions.blockplotid AS blockplotid_2, container.blockplotid AS blockplotid_1, general.blockplotid, general.lotstatus, container.id_container, transactions.id_transaction 
FROM ((general LEFT JOIN transactions ON general.blockplotid=transactions.blockplotid) LEFT JOIN container ON general.blockplotid=container.blockplotid) 
ORDER BY general.blockplotid ASC 

但是看起來好像更新的連接不像select。

該查詢似乎工作:

這個查詢工作:

UPDATE ((general LEFT JOIN transactions ON transactions.blockplotid=general.blockplotid) LEFT JOIN container ON container.blockplotid=general.blockplotid) 
SET general.lotstatus='P' 
WHERE general.blockplotid!='U' AND container.id_container is null AND transactions.id_transaction is not null 

這裏的區別是的情況下IS NOT NULL,也WHERE條件的順序。 對此有任何解釋嗎?

+0

如果刪除括號? – 2012-03-29 20:23:11

+0

不更新任何行。不會返回任何錯誤。 – 2012-03-29 20:27:16

+0

您確定有符合該條件的行嗎?如果將查詢從'update'更改爲'select * from'會怎樣? – 2012-03-29 20:30:49

回答

2

我懷疑連接的圓括號/位置。試試這樣的設置:

UPDATE 

Table1 

SET 

Table1 

. Field1 = StagingTable . Field1 

FROM 

Table1 

INNER JOIN StagingTable 
ON Table1 . Field2 = StagingTable . Field2 
WHERE 

StagingTable . Field3 IS NOT NULL 
0

我會建議重構您的UPDATE語句以具有嵌入式SUB-SELECT。更新一般設置lotstatus =(SELECT .... WHERE ....)