我已经花了很多时间尝试解决它但无法达成解决方案 以下是我的表格。我想要做的是当PO,SKU,LOC和REC在t1和t2之间匹配时从t1删除而t2.ST是D但是同样的PO,SKU,LOC应该存在于t1中,其中ASN不为空。
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存在且ASN不为空。
谢谢。
答案 0 :(得分: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%确定这是您真正想要的 - 它会删除匹配的所有行。如果这不是你想要的,那么你应该问另一个问题。这个问题已经有了答案,以一种使答案无效的方式改变问题是很粗鲁的。
答案 1 :(得分: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);