首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在SQL字符串中放入'if子句‘?

如何在SQL字符串中放入'if子句‘?
EN

Stack Overflow用户
提问于 2012-12-21 22:21:21
回答 9查看 46.6K关注 0票数 215

下面是我想在我的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'

我怎样才能让这个过程更短一点呢?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 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
                     )
票数 483
EN

Stack Overflow用户

发布于 2012-12-21 22:25:09

您可以使用多表UPDATE语法在purchaseOrderitemsOrdered之间实现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
票数 62
EN

Stack Overflow用户

发布于 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*)
票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13991817

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档