5

私は次のことを解決しようとしています: データは、列 X を情報の外部キーとしてテーブルに編成されています (このテーブルの行のセットを、特定の所有者が所有するバンドルに一緒に属するものとして識別する ID です)。別のテーブルのエンティティ)。したがって、X の各個別値には、ここで関連付けられた複数の行があります。列 Q に値「ABC」を含む行が関連付けられている X のすべての個別の値を除外したいと思います。

すなわち

データは次のようになります。

Column X   Column Q
--------   ---------
123        ABC
123        AAA    
123        ANQ
456        ANQ
456        PKR
579        AAA
579        XYZ
886        ABC

クエリは「456」と「579」を返す必要があります。これは、X のこれら 2 つの異なる値には、列 Q に値「ABC」を含む行がないためです。

私が欲しいのはXの個別の値だけなので、マイナス関数でこれを行うことを考えていました(個別のXマイナスを選択します(Q = "ABC"の場合は個別のXを選択してください))。しかし、もっと効率的な方法があるかどうか疑問に思っていましたサブクエリを避けることができるこれを行うには?たとえば、テーブルを X でパーティション分割し、Q で値が「ABC」の行を持つ各パーティションを破棄できるとしたら?

4

4 に答える 4

5

having私は、集計と句を使用して、このような質問(つまり、グループ内のグループについて)に答えることを好みます。この場合の解決策は次のとおりです。

select colx
from data d
group by colx
having max(case when colq = 'ABC' then 1 else 0 end) = 0

colxの値にが含まれている場合ABCmax()式は1を返します。。。これは0と一致しません。

于 2013-01-29T19:53:59.960 に答える
3

これはうまくいくはずです:

SELECT DISTINCT t.ColX
FROM mytable t
  LEFT JOIN mytable t2 on t.colx = t2.colx and t2.colq = 'ABC'
WHERE t2.colx IS NULL

そして、ここにSQL Fiddleがあります。

幸運を。

于 2013-01-29T19:07:29.507 に答える
2

を使用して、これはどうINですか?

SQLFIDDLE デモ

select distinct colx from 
demo
where colx not in (
  SELECT COLX from demo
where colq = 'ABC')
;

| COLX |
--------
|  456 |
|  579 |
于 2013-01-29T19:09:03.083 に答える
0

これを試して:

select DISTINCT colx 
  from demo 
 where colq not like '%A%' 
   AND colq not like '%B%' 
   AND colx not like '%C%'

SQL フィドル

于 2013-01-29T19:10:24.790 に答える