2017-02-15 134 views
0

我已經給了很多時間嘗試解決它,但無法達到解決方案。
下面是我的表格。我試圖做的是當PO,SKU,LOC和REC匹配t1和t2之間的時候從t1中刪除,並且t2.ST是D,但是相同的PO,SKU,LOC應該存在於t1中,並且ASN不爲空。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 

從上面我應該能夠從t1刪除第二行作爲第一行相同的PO,SKU,LOC存在ANS ASN不爲空。

謝謝。

+0

是的,但REC不匹配...你究竟想要什麼? – Kostis

+0

你能告訴我們你的SQL代碼嗎? – jambonick

+0

我會顯示代碼,但我上面介紹的例子是我自己的代碼更簡單的版本。實際代碼更復雜。感謝您的時間。 @jambonick。 – Amir

回答

1

你的問題的字面解釋變成兩條exists條款:

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 
       ); 

我不是100%肯定這是你真正想要的東西 - 它會刪除全部行匹配。如果這不是你想要的,那麼你應該問另一個的問題。這個問題已經有了答案,以一種使答案無效的方式改變問題是不禮貌的。

+0

非常感謝。它爲我工作。 – Amir

0

聽起來像:

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); 
相關問題