gpt4 book ai didi

mysql - 基于连接表的 group by 计数的不同 where 子句列

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

给出以下 2 个表格

table_a
id name num_one num_two
------------------------------------
1 Foo 5 10
2 Bar 4 -1


table_b
name table_a_id
--------------------
Fooa 1
Foob 1

假设我想在 where 子句中使用 ether num_one 或 num_two ,具体取决于另一个表是否已连接行。

我能想到的最好的办法是:

SELECT a.* FROM table_a a
JOIN table_b b on b.table_a_id = a.id
WHERE if(count(b.*) > 0, a.num_one, a.num_two) > 0
group by a.id

理想情况下,它会检查第一行是否为 5 > 0,第二行是否为 -1 > 0,因为第二行没有来自表 B 的连接行。

但是由于无效使用分组依据而出现错误。我知道“拥有”,但不确定在这种情况下如何使用它。

有什么想法吗?谢谢!!

最佳答案

这可以通过 IF 语句、OR 语句或子查询来完成。在大 table 上,这些都不会非常有效。

对原始语句的唯一真正修改是使用 NULL 而不是 count(*)。

SELECT DISTINCT a.* 
FROM table_a a
LEFT JOIN table_b b on b.table_a_id = a.id
WHERE (b.table_a_id is null AND a.num_one > 0)
OR (b.table_a_id is NOT NULL AND a.num_two > 0)

关于mysql - 基于连接表的 group by 计数的不同 where 子句列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7341527/

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