gpt4 book ai didi

MySQL - 只有当左表中存在一行时才加入

转载 作者:可可西里 更新时间:2023-11-01 07:02:11 27 4
gpt4 key购买 nike

这是 MySQL:

SELECT  a.id,
a.name,
a.n,
a.r,
a.pot,
a.ticket_price,
a.starting_tickets,
a.started,
a.end,
COUNT(b.id) tickets_bought
FROM current_lotteries a
JOIN lottery_tickets b ON b.lid=a.id
WHERE a.cid=1
ORDER BY started DESC LIMIT 1

在搜索中,如果 a 中没有行但 b 中有行(即 COUNT(b.id) 是not NULL) 然后此查询返回一行,其中包含 a 字段的 NULL 值以及 COUNT(b.id) 的任何值 作为 tickets_bought。如果表 a 中没有结果,我该如何修改此查询,使其不返回行 (num_rows = 0)?

快照。

query

最佳答案

如果没有 GROUP BY 子句,MySQL(在其他 RDBMS 中会出错的地方允许这样做)在 b 中的所有行上应用聚合组,当它应该将它们分组。添加 GROUP BY a.id

SELECT  a.id,
a.name,
a.n,
a.r,
a.pot,
a.ticket_price,
a.starting_tickets,
a.started,
a.end,
COUNT(b.id) tickets_bought
FROM current_lotteries a
JOIN lottery_tickets b ON b.lid=a.id
WHERE a.cid=1
GROUP BY a.id
ORDER BY started DESC LIMIT 1

以上内容适用于 MySQL,但不适用于其他地方。更便携的版本使用相关子查询:

SELECT  a.id,
a.name,
a.n,
a.r,
a.pot,
a.ticket_price,
a.starting_tickets,
a.started,
a.end,
b.tickets_bought
FROM current_lotteries a
/* More portable to join against a subquery which returns the count per group */
JOIN (
SELECT b.lid, COUNT(*) AS tickets_bought
FROM lottery_tickets
GROUP BY lid
) b ON a.id = b.lid
WHERE a.cid = 1
ORDER BY started DESC LIMIT 1

关于MySQL - 只有当左表中存在一行时才加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14182609/

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