3

FK に対して複数のエントリがあるテーブルがあります。特定のエントリを持たない FK の値を調べたいです。たとえば
、テーブルに次のエントリがあります。

PK----------------FK-----------------列エントリ

1----------------100-----------------ab1
2----------------100-----------------ab2
3----------------100-----------------ab4
4----------------200-----------------ab1
5----------------200-----------------ab2
6----------------200-----------------ab3
7----------------300-----------------ab1
8----------------300-----------------ab2
9----------------300-----------------ab3
10---------------300-----------------ab4

さて、このテーブルから、ab3 または ab4 を含まないすべての FK をフィルター処理したいと思います。確かに、私は異なる値を期待しています。つまり、この場合、結果は FK= 100 と 200 になり
ます。私が使用しているクエリは

select distinct(FK) 
from table1 
where column_entries != 'ab3' 
   or column_entries != 'ab4';

確かに、このクエリは目的の結果を取得していません。

4

3 に答える 3

5

以下を試してください:-

select distinct fk_col from table1
minus
(select distinct fk_col from table1 where col_entry='ab3'
intersect
select distinct fk_col from table1 where col_entry='ab4')

これにより、「ab3」と「ab4」を持たないすべての FK が表示されます。つまり、あなたの場合は 100 と 200

于 2013-01-26T19:47:40.553 に答える
0

HAVING の条件付き集計で GROUP BY を使用できます。

SELECT FK
FROM table1
GROUP BY FK
HAVING COUNT(CASE column_entries WHEN 'ab3' THEN 1 END) = 0
    OR COUNT(CASE column_entries WHEN 'ab4' THEN 1 END) = 0
;

2 つの条件付き集計は、個別にカウント'ab3'および'ab4'エントリします。両方の結果が 0 より大きい場合、対応するにはandと and のFK両方があるため、返されません。カウントの少なくとも 1 つが 0 と評価された場合、要件を満たしていると見なされます。'ab3''ab4'FK

于 2013-01-26T23:38:20.460 に答える