gpt4 book ai didi

php - MySql 多查询还是临时表?

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

我需要 SQL 专家的帮助...

我有以下格式的数据:

Key  Value
100 A
100 B
300 A
400 B
500 A
500 B
500 C
600 B
600 W

如果我想找到带有 A 或 B 和 A 和 B 的所有键,但不包含带有其他任何键的 AB...我该怎么做?我需要一个临时表还是可以以某种方式将表连接到自身?

编辑:所需的输出将是 key 100,因为它有 A 和 B, key 300,因为它有 A, key 400,因为它有 B。不是 key 500,因为它也包含一个 C,而不是 key 600,因为它也包含一个 W

最佳答案

这应该适合你:

SELECT DISTINCT t1.`key`
FROM table1 t1
WHERE t1.value in('A', 'B')
GROUP BY t1.`key`
HAVING COUNT(t1.value) = (SELECT COUNT(t2.value)
FROM Table1 t2
WHERE t1.`key` = t2.`key`)

SQL Fiddle Demo

这只返回键:

  • 只有 AB,没有别的所以 key = 500 不应该返回。但是 key = 100 应该包括在内。
  • 只有 A。如 key = 300
  • 只有 B 所以 key = 600 不应该返回,因为它包含的值比 B 多一个 w 。但是 key = 400 应该包括在内。

更新:这是如何运作的

如果任何键有一个值 IN('A', 'B') 那么它也可以包含其他值。

这就是我添加 HAVING 子句的原因:

HAVING COUNT(t1.value) = (SELECT COUNT(t2.value) 
FROM Table1 t2
WHERE t1.`key` = t2.`key`)

COUNT(t1.value) 通过使用相关子查询SELECT COUNT(t2 .value) FROM Table1 t2 WHERE t1.key = t2.key ,对于每个值 t1.value。因此,如果当前键包含 'A', 'B' 以外的值,则 COUNT(t1.value) 将不等于 COUNT 同一键的所有值。例如 key = 500 有一个 count = 3 但使用:

SELECT DISTINCT t1.`key`
FROM table1 t1
WHERE t1.value in('A', 'B')
GROUP BY t1.`key`

没有 HAVING 子句也会包含它,因为它有 A' 或 'B'。但是 HAVING 子句消除了这个键,因为它的计数 = 3 不等于 2。

关于php - MySql 多查询还是临时表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13270945/

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