0

私は2つのテーブルを持っています

id_a | id_b
-----------
01   | 011
01   | 012
02   | 021
02   | 022

id_b |  cl   | ds
------------------
011  | F9.00 | G
012  | F3.00 | G
021  | F9.00 | P
022  | G7.50 | G

テーブルは id_b で結合されます。の組み合わせがないすべての Id_a を知りたいですF9.00 | G。したがって、この場合、私の望ましい結果は02です。行は要件に01 | 012 | F3.00 | G一致しませんが、 asとの組み合わせがあるため、結果として取得F9.00 | Gしたくありません。0101 |011 | F9.00 | G01id_a

現時点では簡単なクエリは考えられません。たぶん、あなたの何人かはアイデアを持っています。

よろしく、Søren

4

3 に答える 3

1

このようなもの:

select t1.id_a
from t1
  join t2 on t1.id_b = t2.id_b
where (t2.cl, t2.ds) <> ('F9.00', 'G')
group by t1.id_a
having count(*) = (select count(*) 
                   from t1 as t3
                   where t3.id_a = t1.id_a);

これは、 の組み合わせが'F9.00', 'G'存在しない行を取得し、その結果の行数がその合計行数と同じになる行のみを取得しますid_a


プラットフォームを指定した後、編集します。

上記は ANSI SQL です。kylin が ANSI SQL をサポートしているかどうかはわかりません。where (t2.cl, t2.ds) <> ('F9.00', 'G')うまくいかない場合は、使用する必要がありますwhere t2.cl <> 'F9.00' and t2.ds <> 'G'

于 2016-08-23T13:05:29.670 に答える
0

CONCAT列 c1 および ds で使用できます。

SELECT DISTINCT id_a
FROM T1 INNER JOIN T2
ON T1.id_b = T2.id_b
WHERE id_a NOT IN
(SELECT id_a
 FROM T1 INNER JOIN T2
 ON T1.id_b = T2.id_b
 WHERE CONCAT(c1, ds) = 'F9.00G')
于 2016-08-23T13:59:04.757 に答える
0
select id_a
from table1
except
select t1.id_a
from table1 t1
inner join table2 t2
on t1.id_b=t2.id_b
where t2.c1 = F9.00
and t2.ds = G

このコードは、不要な ID を下部に、すべての ID を上部に取得してから、それらを除外します。

于 2016-08-23T12:58:23.150 に答える