下面是我想在我的MySQL数据库上做的事情。
我想做的是:
SELECT *
FROM itemsOrdered
WHERE purchaseOrder_ID = '@purchaseOrdered_ID'
AND status = 'PENDING'
如果不返回任何行(这可以通过if(dr.HasRows == false)
实现),我现在将在purchaseOrder
数据库中创建一个UPDATE
:
UPDATE purchaseOrder
SET purchaseOrder_status = 'COMPLETED'
WHERE purchaseOrder_ID = '@purchaseOrder_ID'
我怎样才能让这个过程更短一点呢?
发布于 2012-12-21 22:23:31
对于特定的查询,您可以执行以下操作:
UPDATE purchaseOrder
SET purchaseOrder_status = 'COMPLETED'
WHERE purchaseOrder_ID = '@purchaseOrder_ID' and
not exists (SELECT *
FROM itemsOrdered WHERE purchaseOrder_ID = '@purchaseOrdered_ID' AND status = 'PENDING'
)
然而,我可能会猜想你是在一个更高的层次上循环。要设置所有这样的值,请尝试执行以下操作:
UPDATE purchaseOrder
SET purchaseOrder_status = 'COMPLETED'
WHERE not exists (SELECT 1
FROM itemsOrdered
WHERE itemsOrdered.purchaseOrder_ID = purchaseOrder.purchaseOrdered_ID AND
status = 'PENDING'
limit 1
)
发布于 2012-12-21 22:25:09
您可以使用多表UPDATE
语法在purchaseOrder
和itemsOrdered
之间实现ANTI-JOIN
UPDATE purchaseOrder p LEFT JOIN itemsOrdered i
ON p.purchaseOrder_ID = i.purchaseOrder_ID
AND i.status = 'PENDING'
SET p.purchaseOrder_status = 'COMPLETED'
WHERE p.purchaseOrder_ID = '@purchaseOrder_ID'
AND i.purchaseOrder_ID IS NULL
发布于 2012-12-21 23:00:40
因为MySQL不支持if exists(*Your condition*) (*Write your query*)
,所以你可以这样写来实现一个'if子句‘:
(*Write your insert or update query*) where not exists (*Your condition*)
https://stackoverflow.com/questions/13991817
复制相似问题