SQL中的通用和存在量化

est*_*lua 1 sql

有关系

X | Y
-------
a | i
a | ii
b | ii
b | ii
Run Code Online (Sandbox Code Playgroud)

如何查询

  1. 该组所有的X存在用于其一个Y长度2(应产生的{ a, b }
  2. X所有Y长度为2 的集合(应屈服{ b }

Lar*_*tig 5

第一个非常简单(请注意,在所有示例中,LENGTH_FUNCTION代表您所使用的任何SQL数据库中特定于产品的字符串长度函数):

 SELECT DISTINCT X FROM RelationName WHERE LENGTH_FUNCTION(Y) = 2;
Run Code Online (Sandbox Code Playgroud)

对于第二个问题,有多种解决问题的方法。

 SELECT X FROM RelationName GROUP BY X 
    HAVING MIN(LENGTH_FUNCTION(Y)) = 2 AND MAX(LENGTH_FUNCTION(Y)) = 2
Run Code Online (Sandbox Code Playgroud)

将汇总所有X值并过滤长度仅为2的那些X

 SELECT DISTINCT X FROM RelationName WHERE LENGTH_FUNCTION(Y) = 2
    AND X NOT IN (SELECT DISTINCT X FROM RelationName WHERE LENGTH_FUNCTION(Y) <> 2)
Run Code Online (Sandbox Code Playgroud)

使用与第一个查询相同的过滤器,但另外过滤掉表中其他位置存在的任何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)
Run Code Online (Sandbox Code Playgroud)

以您可能会发现更具表现力的方式进行相同的过滤(但性能可能较低)