2017-02-15 12 views
0

私はそれを解決しようと多くの時間を与えましたが、解決策には到達できませんでした。
以下は私のテーブルです。 PO、SKU、LOC、RECがt1とt2の間で一致し、t2.STがDですが、同じPO、SKU、LOCがt1に存在し、ASNがnullでない場合は、t1から削除します。SQL:他のテーブルに基づいてテーブルから選択

T1

PO | SKU| LOC | ASN |REC | allID 
a b c  e NULL NULL 
a b c  g  g  12 

T2以上から

PO |SKU |LOC |ASN |REC |ST 
a b c NULL g D 

iは最初の行と同じPO上のようにT1から2番目の行を削除することができ、SKU、LOCが存在しなければならないANS ASNがnullではありません。

ありがとうございます。

+0

はい、RECと一致しません...正確に何をしたいですか? – Kostis

+0

あなたのSQLコードを表示できますか? – jambonick

+0

私はコードを表示していましたが、私が上に示した例は自分のコードのかなり単純なバージョンです。実際のコードはより複雑です。あなたの時間をありがとう。 @jambonick。 – Amir

答えて

1

:私は、これはあなたが本当に欲しいものである100%わからない

delete t1 
    where exists (select 1 
        from t2 
        where t2.PO = t1.PO and t2.SKU = t1.SKU and 
         t2.LOC = t1.LOC and t2.REC = t1.REC and 
         t2.ST = 'D' 
       ) and 
      exists (select 1 
        from t1 tt1 
        where tt1.PO = t1.PO and tt1.SKU = t1.SKU and 
         tt1.LOC = t1.LOC and tt1.asn is not null 
       ); 

- それはしますすべての一致する行を削除してください。これがあなたが望むものでなければ、もう1つ質問してください。この質問には既に回答があり、回答を無効にする方法で質問を変更するのは失礼です。

+0

ありがとうございました。それは私のために働いた。 – Amir

0

ような音:あなたの質問のリテラル解釈は2つのexists句に変わり

delete from t1 
where (t1.po,t1.sku,t1.loc,t1.rec) in 
    (select t2.po,t2.sku,t2.loc,t2.rec 
    from t2 
    where t2.st = 'D') 
and exists (select * from t1 t1_2 
      where t1_2.po = t1.po 
      and t1_2.sku = t1.sku 
      and t1_2.loc = t1.loc 
      and t1_2.asn is not null); 
関連する問題