【发布时间】:2012-03-29 20:04:54
【问题描述】:
我正在尝试通过检查两个连接表来更新列的状态。即使我没有收到错误。该列未更新。我想获取一般的blockplot id,看看是否有匹配的交易和/或容器。如果有交易但没有容器,我需要将其标记为 P。
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
但似乎更新的连接不像选择。
这个查询似乎有效:
这个查询有效:
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 条件的顺序。 这有什么解释吗?
【问题讨论】:
-
如果去掉括号会怎样?
-
不更新任何行。也不返回任何错误。
-
您确定有符合该条件的行吗?如果将查询从
update更改为select * from会怎样? -
我对此进行了测试,它返回了 1,718 行
-
嗯...您的
general表上有任何触发器吗?