Mysql 非IN运算符的SQL查询

Mysql 非IN运算符的SQL查询,mysql,sql,select,Mysql,Sql,Select,我需要你帮我写一个棘手的问题。场景如下所示 SELECT LOCATION FROM TABLE WHERE ATTRIBUTE NOT IN ('A','I','Z') 应排除具有属性A、I、Z的位置(这很简单)。但有一个例外。当位置包含a和I属性的组合时,不应将其排除在外(即,不应排除班加罗尔)。 而德里(不包括属性A和Q)。因此,查询的输出应该如下所示 排除查询如下所示 SELECT LOCATION FROM TABLE WHERE ATTRIBUTE NOT IN ('A','I

我需要你帮我写一个棘手的问题。场景如下所示

SELECT LOCATION
FROM TABLE
WHERE ATTRIBUTE NOT IN ('A','I','Z')

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

排除查询如下所示

SELECT LOCATION
FROM TABLE
WHERE ATTRIBUTE NOT IN ('A','I','Z')

但需要考虑属性A和I.P/>>P的例外情况:一种方法是根据位置分组并计算不同属性的数量。通过使用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

以下查询将显示不在A、I、Z中的位置,班加罗尔除外

SELECT Location
FROM 
TABLE WHERE 
LOCATION NOT IN 
(SELECT LOCATION, 
FROM TABLE
WHERE ATTRIBUTE IN ('A','I','Z')
UNION ALL
SELECT LOCATION
FROM TABLE
WHERE ATTRIBUTE IN ('A','Q')
GROUP BY LOCATION
HAVING COUNT(DISTINCT ATTRIBUTE) = 2)
UNION ALL
SELECT LOCATION
FROM TABLE
WHERE ATTRIBUTE IN ('A','I')
GROUP BY LOCATION
HAVING COUNT(DISTINCT ATTRIBUTE) = 2
这里有第三种选择:

    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' ) )

将表格数据和输出作为文本,而不是图像。@JoakimDanielson,我没有看到这种情况。我应该做的that@VenkataramanR-不,实际上,不需要第三个联合体。德里应该被排除在外。@JoakimDanielson-在前两个选择中,德里将不被包括在内。@kavanabangalore,是的,但第二个是一个特例,不是你问题的一部分,所以我不确定你想说什么。