输入
+--------+------+------+
| col1 | col2 | col3 |
+--------+------+------+
| apple | d | 10 |
| apple | d | 44 |
| apple | e | 55 |
| orange | d | 99 |
| orange | c | 33 |
| orange | d | 10 |
| banana | e | 55 |
| banana | d | 10 |
+--------+------+------+
必需的输出
+--------+------+------+
| col1 | col2 | col3 |
+--------+------+------+
| apple | d | 10 |
| orange | d | 10 |
| banana | d | 10 |
+--------+------+------+
我们将检查col2和col3的N种不同类型的水果。
我们只想列出那些col2和col3值相同而且所有水果都有行的那些
你可以这样想: -
第1步
将所有不同类型的水果分开: -
苹果: -
+-------+------+------+
| col1 | col2 | col3 |
+-------+------+------+
| apple | d | 10 |
| apple | d | 44 |
| apple | e | 55 |
+-------+------+------+
橙: -
+--------+------+------+
| col1 | col2 | col3 |
+--------+------+------+
| orange | d | 99 |
| orange | c | 33 |
| orange | d | 10 |
+--------+------+------+
香蕉: -
+--------+------+------+
| col1 | col2 | col3 |
+--------+------+------+
| banana | e | 55 |
| banana | d | 10 |
+--------+------+------+
第2步: -
现在只选择那些
的行和
观察: -
'apple e 55'和'banana e 55'具有相同的col2和col3值,但未选中它,因为'orange e 55'不存在。
如果您使用临时表,请确保它应该是通用的。它应该支持N个水果。
注意: - 这不是学生:D
的作业。我用简单的语言解释它,因为它是一个漫长而冗长的查询的一部分,我对如何解决它的问题也是如此。我一直在使用创建临时表的技术,但我遇到了一些问题。它不是通用的。所以,我相信这个问题可能有更好的解决方案。
答案 0 :(得分:5)
基本上,您可以通过此查询获取所有水果中存在的记录,而不管name
,
SELECT col2, col3
FROM tableName
GROUP BY col2, col3
HAVING COUNT(*) = (SELECT COUNT(DISTINCT col1) FROM tableName)
一组两列中的记录总数:col2
和col3
必须等于结果总数。 SELECT COUNT(DISTINCT col1) FROM tableName
。
因此,为了获得所有水果中存在组合的所有记录,我们需要JOIN
表格本身。
SELECT a.*
FROM tableName a
INNER JOIN
(
SELECT col2, col3
FROM tableName
GROUP BY col2, col3
HAVING COUNT(*) = (SELECT COUNT(DISTINCT col1) FROM tableName)
) b ON a.col2 = b.col2 AND
a.col3 = b.col3