用于NOT IN运算符的SQL查询

时间:2018-09-14 08:22:12

标签: mysql sql select

在编写棘手的查询时,我需要您的帮助。情况如下

Table

应排除具有属性A,I,Z的位置(这很简单)。但是有一个例外。当location包含A和I属性的组合时-不应将其排除(即,不应排除Bangalore)。 而德里(不包括属性A和Q)。因此查询的输出应如下所示。

Output

排除查询很简单,如下所示

<merged>{collection('/my/folder/')}</merged>

但是需要扩展它以考虑属性A和I的异常。

2 个答案:

答案 0 :(得分:1)

一种方法是根据位置分组并计算不同属性的数量。通过使用case语句,您可以仅匹配相关属性:

SELECT   location
FROM     mytable
GROUP BY location
HAVING   COUNT(DISTINCT CASE WHEN attribute IN ('A', 'I') THEN 1 END) = 2 OR
         COUNT(DISTINCT CASE WHEN attribute IN ('A', 'I', 'Z') THEN 1 END) = 0

答案 1 :(得分:0)

这是第三个选项:

    SELECT t.LOCATION
    FROM TABLE t
    WHERE t.ATTRIBUTE NOT IN ( 'A','I','Z' )
       OR ( t.ATTRIBUTE = 'A'
        AND EXISTS( SELECT 1
                    FROM TABLE t2
                    WHERE t.LOCATION   = t2.LOCATION
                      AND t2.ATTRIBUTE = 'I' ) )