元のレコードとキャンセルされたレコードを含むテーブルがあります。オリジナルレコードはcode = 1でマークされ、キャンセルされたレコードはcode = 2でマークされます。他のタイプのコードもあります。私は、テーブルにキャンセルレコードを持たないすべての元のレコードを見つける必要があります。SQLでペアを見つける方法
など。表1
id | column2 | column3 | code
-- |-------- | ------- | ---
1 | abc | def | 1
2 | xyz | pqr | 1
3 | abc | def | 2
クエリの結果は、取り消されていないため、IDが2の行にする必要があります。
私はこの答えは、それが相関サブクエリを回避becauese NOT EXISTS
を使用することが好ましい自己結合
select *
from table1 t1
join table1 t2 on t1.column1=t2.column1
and t1.column2=t2.column2
and t1.code<t2.code
where not (t1.code=1 and t2.code=2)
@ AT-2016 AFAIKキャンセルの存在はアクティブレコードをキャンセルするので、結果セットには表示されません。 –
行1に行3に取り消しレコードがあるため、このテーブルでは取り消しのために新しいレコードが挿入されます。 – Jansvin
@Tim got it。ありがとう。 –