输入
+--------+------+------+ | 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。我用简单的词来解释它,因为它是一个漫长而冗长的查询的一部分,并且我对如何解决这个问题有“零”的想法。我一直在使用创建临时表的技术,但是遇到了一些问题。它不是通用的。因此,我相信可能会对此问题有更好的解决方案。
:D
基本上,您可以获取所有水果中存在的记录,而无需name通过此查询进行操作,
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。
col2
col3
SELECT COUNT(DISTINCT col1) FROM tableName
因此,要获取在所有水果中都具有组合的所有记录,我们需要JOIN表本身。
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