2017-09-09 7 views
0

を存在する場合にのみ、私は次のテーブルがあります。削除行レコードのコピーが

を、私はC3がnullであるだけで別のレコード、レコードを削除したいですc1とc2の同じ値がすでに存在します。つまり、赤い矢印が付いた行だけを削除します。どうやってやるの?

enter image description here

答えて

1

あなたは、あなたがそれを実行し、それが

SELECT * 
FROM table t1 
WHERE 
    t1.c3 IS NULL AND 
    EXISTS(
    SELECT null FROM table t2 
    WHERE t1.c1 = t2.c1 AND COALESCE(t1.c2, 'value that will never appear in the table') = COALESCE(t2.c2, 'value that will never in the table') AND t2.c3 IS NOT NULL 
    ) 
を削除するには、あなたがしたい行を選択することを確認することができaccidentally-ペーストやホース何かをコピーしていないので、私は、選択としてこれを記述します削除する

変換は、単に削除して*選択を交換する場合でなければなりませんが、それはうまくいかない場合は...

編集発言コメントしてください:

を0

行Xのnullのc2値が行Yのnullの別のc2値と等しいことを確認する方法をデモするために使用されます。 'テーブルに表示されない値' SQL内の両方の出現で同一であり、テーブル内に出現することはできません。そうでない場合、NULLを持つ行は実際の値を持つ他の行と一致します

+0

私はそれだと思います!どうもありがとうございました。 – geek2000

+0

私はこれを実際のテーブルに対して実行します。これが機能しないケースが少なくとも1つあります。私は2つのレコード( 'B'、null、'15 ')、(' B '、null、null)を持っている場合、コードは(' B '、null、null)を返しません。サブクエリからc2を削除する以外の方法はありますか?私は12の列を持ち、そのうちのいずれかにNULL値を設定できます。 – geek2000

+0

技術的にnullは決して他のものと等しくはありません。 c2のヌルもnullの別の行と同じですので、c1のログは同じで、ヌルを同等の値に変換するために合体を使用できます。 –

関連する問題