所以这就是我想在我的MySQL数据库上做的事情.
我想要做:
SELECT *
FROM itemsOrdered
WHERE purchaseOrder_ID = '@purchaseOrdered_ID'
AND status = 'PENDING'
Run Code Online (Sandbox Code Playgroud)
如果那不会返回任何行,那么if(dr.HasRows == false)我现在可以UPDATE在purchaseOrder数据库中创建一个:
UPDATE purchaseOrder
SET purchaseOrder_status = 'COMPLETED'
WHERE purchaseOrder_ID = '@purchaseOrder_ID'
Run Code Online (Sandbox Code Playgroud)
我怎样才能让这个过程变得更短?
Gor*_*off 373
对于您的特定查询,您可以:
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'
)
Run Code Online (Sandbox Code Playgroud)
但是,我可能会猜到你正在更高层次上进行循环.要设置所有这些值,请尝试以下操作:
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
)
Run Code Online (Sandbox Code Playgroud)
egg*_*yal 49
您可以使用多表UPDATE语法来实现ANTI-JOIN之间purchaseOrder和itemsOrdered:
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
Run Code Online (Sandbox Code Playgroud)
Ran*_*ngh 43
由于MySQL不支持if exists(*Your condition*) (*Write your query*),您可以通过这样编写来实现'if子句':
(*Write your insert or update query*) where not exists (*Your condition*)
Run Code Online (Sandbox Code Playgroud)
小智 23
您还可以使用以下查询来检查记录是否存在,然后更新它:
if not exists(select top 1 fromFROM itemsOrdered
WHERE purchaseOrder_ID = '@purchaseOrdered_ID'
AND status = 'PENDING' )
Begin
UPDATE purchaseOrder
SET purchaseOrder_status = 'COMPLETED'
WHERE purchaseOrder_ID = '@purchaseOrder_ID
End
Run Code Online (Sandbox Code Playgroud)
小智 20
Select FROM t1
WHERE s11 > ANY
(SELECT col1,col2 FROM t2
WHERE NOT EXISTS
(SELECT * FROM t3
WHERE ROW(5*t2.s1,77)=
(SELECT 50,11*s1 FROM t4 UNION SELECT 50,77 FROM
(SELECT * FROM t5) AS t5)));
Run Code Online (Sandbox Code Playgroud)
小智 11
if not exists(select top 1 fromFROM itemsOrdered
WHERE purchaseOrder_ID = '@purchaseOrdered_ID'
AND status = 'PENDING' )
Begin
UPDATE purchaseOrder
SET purchaseOrder_status = 'COMPLETED'
WHERE purchaseOrder_ID = '@purchaseOrder_ID
End
Run Code Online (Sandbox Code Playgroud)
它可以帮助你在sql服务器中使用Merge插入,更新和删除基于sql server中的匹配语句,例如它可以帮助你https://technet.microsoft.com/en-us/library/bb522522(v=sql. 105)的.aspx
如果表包含数百万条记录,则以下查询将快速运行。
UPDATE PO
SET PO.purchaseOrder_status = 'COMPLETED'
FROM purchaseOrder PO
LEFT OUTER JOIN itemsOrdered IOD ON IOD.purchaseOrder_ID = PO.purchaseOrdered_ID and IOD.status = 'PENDING'
WHERE IOD.purchaseOrder_ID IS NULL
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
27417 次 |
| 最近记录: |