如何加入两个比较不同结果的查询?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (9)

我有一张叫做match所有matches比赛的表。该表的结构如下:

id | round_id | datetime | status | home | away | result

基本上每个match都有一个status表明:

  1. Scheduled
  2. Postponed
  3. Canceled
  4. Playing
  5. Finished

还有round_id表明的参考competition

在我的应用程序中,我每次都会检查是否round需要更新。为此,首先我检查matches联盟的所有状态是否包含35。查询如下:

SELECT (COUNT(*) = SUM(status in (3, 5)) 
                   AND COUNT(*) = 380) AS result 
                   FROM `match` WHERE round_id = 10

因此,如果380匹配被取消或完成,则round更新10。

如果上面的查询结果为false,那么需要更新轮次,那么我必须检查哪个matches需要更新。

为此,我编写了以下查询:

SELECT COUNT(*) AS result FROM `match` m2 
                   WHERE m2.round_id = 10
                   AND m2.datetime < NOW() AND m2.status IN (1, 2)

上述检查查询是否存在matches具有datetime比当前更低,并且如果它们中的状态为12,具体地(定期和推迟)。

由于以下原因,我对我的实现并不满意:

  1. 我需要执行两个查询以检查是否需要更新。
  2. 最后一个查询返回的数字match,但我的目标是返回一个boolean。但我的技能sql并不是那么先进。

可以将这两个查询合二为一,只需检查一下吗?

在此先感谢您的帮助。

更新 - 数据结构的数据库

id | round_id |        datetime      | status | home | away | result
 1      10      2018-08-15 00:00:00      5        A      B     1-0
 2      10      2018-08-15 00:00:00      5        C      D     1-1
 3      10      2018-08-15 00:00:00      5        E      F     2-1
 4      10      2018-08-15 00:00:00      5        G      H     2-2

matches上述全部更新“导致状态是5这样的round10不需要任何更新。第一个查询将返回 true,第二个查询将返回0。

现在考虑这个例子:

id | round_id |        datetime      | status | home | away | result
 1      11      2018-08-15 00:00:00      5        A      B     1-0
 2      11      2019-08-15 00:00:00      1        C      D      
 3      11      2019-01-15 00:00:00      5        E      F     2-1
 4      11      2019-03-12 00:00:00      1        G      H      

round11种需要更新,因为我们有2个matches被调度,但只有matchid4已经发挥,所以查询需要返回false,因为round11不更新。

提问于
用户回答回答于

我想你想要这样的东西:

SELECT (COUNT(*) = SUM(status in (3, 5)) AND
        COUNT(*) = 380 AND
        SUM(mdatetime < NOW() AND status IN (1, 2)) = 0
       ) AS result 
FROM `match`
WHERE round_id = 10;

我想你只想检查第二个查询是否返回大于0的计数。无论如何,你可以将所有这些条件组合成一个布尔结果。

所属标签

可能回答问题的人

  • 学生

    3 粉丝476 提问7 回答
  • uncle_light

    5 粉丝518 提问6 回答
  • 最爱开车啦

    8 粉丝503 提问5 回答
  • 骑牛看晨曦

    4 粉丝522 提问5 回答

扫码关注云+社区

领取腾讯云代金券