MySQL:仅在满足某些条件的情况下更新项目

大卫x1

有谁知道仅当其中一个列与表中另一行中的同一个列不相等时才更新行吗?

让我解释。考虑一下这张桌子。它存储一些预订,管理员可以决定批准​​哪个预订。

Booking |  Time | Approved
   0    |  5:00 |   NO
   1    |  5:00 |   NO
   2    |  6:00 |   YES
   3    |  6:00 |   NO

预订请求可能会重叠,例如“预订0”和“ 1”就是这种情况。管理员可以决定批准​​0还是1。

但是批准的预订不能重叠。例如,由于预订2已在6:00批准,因此预订3无法被批准。除非管理员决定先拒绝预订2。

我将如何为此编写查询以确保不会发生冲突?我在考虑以下方面的想法:

 UPDATE requests
 SET Approved = 'YES'
 WHERE Booking = 3
 AND NOT EXISTS (
    (SELECT Time 
    FROM requests
    WHERE Booking = 3)
    = 
    (SELECT Time
    From requests
    WHERE Booking != 3)
 );

但这是行不通的。

任何帮助将非常感激。

作为旁注。我的实际问题有点复杂。桌子看起来更像

Booking |  Start Time | End Time |Approved
   0    |  5:00       |   6:00   | NO
   1    |  5:00       |   7:00   | NO
   2    |  6:00       |   8:00   | YES
   3    |  6:00       |   9:00   | NO

而且我正努力防止预订重叠。但是我敢肯定,如果我对问题的简单版本使用正确的语法,那么我也将能够找出复杂的版本。

巴尔玛

您使用不NOT EXISTS正确。它的参数应该是单个子查询,而不是比较两个子查询的表达式。在您的情况下,子查询中的条件是时间相同,但ID与您要更新的ID不同,而另一个ID已被批准。

UPDATE request AS r1
SET approved = 'YES'
WHERE r1.id = 3
AND NOT EXISTS (
    SELECT *
    FROM request AS r2
    WHERE r2.time = r1.time AND r2.id != r1.id AND r2.approved = 'YES'
)

要解决该错误,请使用该LEFT JOIN / NULL模式。

UPDATE request AS r1
LEFT JOIN request AS r2 ON r2.time = r1.time AND r2.id != r1.id AND r2.approved = 'YES'
SET r1.approved = 'YES'
WHERE r1.id = 3 AND r2.id IS NULL

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

MySQL:仅在满足某些条件的情况下更新项目

来自分类Dev

仅在满足条件的情况下选择某些列

来自分类Dev

SQL:仅在满足条件的情况下更新字段

来自分类Dev

仅在满足条件的情况下更新行

来自分类Dev

仅在满足条件的情况下更新行

来自分类Dev

仅在满足某些条件的情况下添加单元格

来自分类Dev

仅在满足条件的情况下才加入SQL

来自分类Dev

仅在满足条件的情况下运行SQL查询

来自分类Dev

仅在满足条件的情况下如何开始活动

来自分类Dev

仅在满足条件的情况下才执行CHECK语句

来自分类Dev

仅在满足条件的情况下如何开始活动

来自分类Dev

仅在满足条件的情况下进行Rails模型计算

来自分类Dev

jQuery:仅在满足某些条件的情况下,更改与另一个DIV共享类的DIV(但仍然也拥有一个唯一的类)

来自分类Dev

仅在* all *值不满足特定条件的情况下选择SQL中的行

来自分类Dev

bash列出特定类型的文件,但仅在满足条件的情况下

来自分类Dev

仅在明细表满足条件的情况下,才如何获取主表的行?

来自分类Dev

在jVectorMap中,仅在满足条件的情况下如何选择区域?

来自分类Dev

angular 2仅在满足条件的情况下如何添加元素属性

来自分类Dev

MongoDB:仅在满足条件的情况下才应用$ filter阶段?

来自分类Dev

仅在“详细信息”表满足条件的情况下,才如何获取“主行”表?

来自分类Dev

仅在满足特定条件的情况下如何使菜单可单击?

来自分类Dev

MySQL情况下的条件

来自分类Dev

MySQL-查找唯一值,但仅在某些变量为true的情况下

来自分类Dev

仅在满足两个条件的情况下,才在单个sql语句中选择两行

来自分类Dev

是否可以在不运行默认生命周期阶段的情况下强制更新项目?

来自分类Dev

是否可以在不运行默认生命周期阶段的情况下强制更新项目?

来自分类Dev

Selenium无法连接到GhostDriver(但仅在某些情况下)

来自分类Dev

WakefulBroadcastReceiver意图仅在某些情况下才开始(奇怪)

来自分类Dev

Ubuntu启动到黑屏-但仅在某些情况下

Related 相关文章

  1. 1

    MySQL:仅在满足某些条件的情况下更新项目

  2. 2

    仅在满足条件的情况下选择某些列

  3. 3

    SQL:仅在满足条件的情况下更新字段

  4. 4

    仅在满足条件的情况下更新行

  5. 5

    仅在满足条件的情况下更新行

  6. 6

    仅在满足某些条件的情况下添加单元格

  7. 7

    仅在满足条件的情况下才加入SQL

  8. 8

    仅在满足条件的情况下运行SQL查询

  9. 9

    仅在满足条件的情况下如何开始活动

  10. 10

    仅在满足条件的情况下才执行CHECK语句

  11. 11

    仅在满足条件的情况下如何开始活动

  12. 12

    仅在满足条件的情况下进行Rails模型计算

  13. 13

    jQuery:仅在满足某些条件的情况下,更改与另一个DIV共享类的DIV(但仍然也拥有一个唯一的类)

  14. 14

    仅在* all *值不满足特定条件的情况下选择SQL中的行

  15. 15

    bash列出特定类型的文件,但仅在满足条件的情况下

  16. 16

    仅在明细表满足条件的情况下,才如何获取主表的行?

  17. 17

    在jVectorMap中,仅在满足条件的情况下如何选择区域?

  18. 18

    angular 2仅在满足条件的情况下如何添加元素属性

  19. 19

    MongoDB:仅在满足条件的情况下才应用$ filter阶段?

  20. 20

    仅在“详细信息”表满足条件的情况下,才如何获取“主行”表?

  21. 21

    仅在满足特定条件的情况下如何使菜单可单击?

  22. 22

    MySQL情况下的条件

  23. 23

    MySQL-查找唯一值,但仅在某些变量为true的情况下

  24. 24

    仅在满足两个条件的情况下,才在单个sql语句中选择两行

  25. 25

    是否可以在不运行默认生命周期阶段的情况下强制更新项目?

  26. 26

    是否可以在不运行默认生命周期阶段的情况下强制更新项目?

  27. 27

    Selenium无法连接到GhostDriver(但仅在某些情况下)

  28. 28

    WakefulBroadcastReceiver意图仅在某些情况下才开始(奇怪)

  29. 29

    Ubuntu启动到黑屏-但仅在某些情况下

热门标签

归档