gpt4 book ai didi

mysql - 仅连接特定行

转载 作者:行者123 更新时间:2023-11-29 14:29:35 25 4
gpt4 key购买 nike

我正在寻找一个 SQL 查询,该查询将根据连接行的内容返回 1 或 0。

两个表:

事件:

  • 事件 ID
  • 描述符

预选赛:

  • qualifier_id
  • event_id
  • qualifier_type
  • 值(value)

每个事件可以有多个限定符。

我当前的查询是:

select event_id, if(qualifier_type = 15, 1, 0)
from events
join qualifiers q using (event_id)
where q.qualifier_type = 15;

在完美的世界中,我会很好地标准化这些表格并将不同的预选赛与事件一起放入,但目前这是不可能的。

编辑:目前,此查询仅返回具有关联的行。相反,我需要返回所有行和一个额外的列来指定此关联是否存在。

最佳答案

SELECT e.event_id, COUNT(q.qualifier_type) AS needs_qualtype_15
FROM events AS e
LEFT JOIN qualifiers AS q ON q.event_id = e.event_id AND q.qualifier_type = 15
GROUP BY e.event_id

这将为您提供所有事件的列表,并指示限定符类型 15 是否与该事件关联。

编写相同内容的另一种方式是:

SELECT e.event_id, COUNT(q.qualifier_type) AS needs_qualtype_15
FROM events AS e
LEFT JOIN
(SELECT event_id, qualifier_type
FROM qualifiers WHERE qualifier_type = 15
) AS q
ON q.event_id = e.event_id
GROUP BY e.event_id;

两种公式都依赖于 COUNT(expr) 仅计算非空值。对于具有匹配限定符的事件,COUNT 为 1;对于没有的事件,它是 0。第一个版本通过将限定符类型的条件包含到 ON 连接条件中来压缩查询。第二个版本更清晰,但更冗长。一个好的优化器很可能会以相同的方式执行两个查询。

关于mysql - 仅连接特定行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10271965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com