给出关系
X | Y
-------
a | i
a | ii
b | ii
b | ii
如何查询
X
的所有Y
的集合(应该产生{ a, b }
)X
所有Y
长度为2的所有{ b }
的集合(应该产生{{1}})答案 0 :(得分:4)
第一个相当简单(注意,在所有示例中,LENGTH_FUNCTION代表您正在使用的任何SQL数据库中特定于产品的字符串长度函数):
SELECT DISTINCT X FROM RelationName WHERE LENGTH_FUNCTION(Y) = 2;
对于第二种方法,有多种方法可以解决这个问题。
SELECT X FROM RelationName GROUP BY X
HAVING MIN(LENGTH_FUNCTION(Y)) = 2 AND MAX(LENGTH_FUNCTION(Y)) = 2
将聚合所有X值并过滤那些长度仅为2的
SELECT DISTINCT X FROM RelationName WHERE LENGTH_FUNCTION(Y) = 2
AND X NOT IN (SELECT DISTINCT X FROM RelationName WHERE LENGTH_FUNCTION(Y) <> 2)
使用与第一个查询相同的过滤器,但另外过滤掉表中其他位置的任何X值,其值为非长度为2的Y值。最后
SELECT DISTINCT X FROM RelationName RN1 WHERE LENGTH_FUNCTION(Y) = 2
AND NOT EXISTS (SELECT * FROM RelationName WHERE X = RN1.X AND LENGTH_FUNCTION(Y) <> 2)
以一种你可能会发现更具表现力的方式进行相同的过滤(但可能性能较差)