Sql 多个表,消除数据
假设有三个表T1、T2和T3 T1有Ordernum和bizdate列 T2有Ordernum和Orderitem列 T3有Orderitem和Catid列 仅供参考:每个ordernum下有多个orderitems;每个ordertiem都有多个CATID。 我想消除任何itemnum的catid=100的ordernums 正如我所说,每个ordernum都有多个orderitem,因此我希望消除所有orderitem,即使ordernum中只有一个orderitem的catid=100Sql 多个表,消除数据,sql,Sql,假设有三个表T1、T2和T3 T1有Ordernum和bizdate列 T2有Ordernum和Orderitem列 T3有Orderitem和Catid列 仅供参考:每个ordernum下有多个orderitems;每个ordertiem都有多个CATID。 我想消除任何itemnum的catid=100的ordernums 正如我所说,每个ordernum都有多个orderitem,因此我希望消除所有orderitem,即使ordernum中只有一个orderitem的catid=100 换
换句话说,我只想打印ordernum,其中catid!=100您可以使用EXISTS子句:
SELECT T1.OrderNum
FROM T1
WHERE NOT EXISTS
(SELECT * FROM T2 INNER JOIN T3 ON T2.Orderitem = T3.Orderitem
WHERE T1.OrderNum = T2.OrderNum AND T3.Catid != 100)
您可以使用子查询来挑选具有该类别的订单,并使用该子查询筛选出这些订单:
select
OrderNum
from
T1 as t
where
not exists(
select *
from T1
inner join T2 on T2.Ordernum = T1.Ordernum
inner join T3 on T3.Orderitem = T2.Orderitem and T3.Catid = 100
where T1.Ordernum = t.Ordernum
)
您需要选择全部,然后在where语句中排除它们。我想这会管用的 从T1 a1中选择a1.OrderNum a1.OrderNum=a2.OrderNum上的内部联接T2 a2 a2.Orderitem=a3.Orderitem上的内部联接T3 a3 其中不包括a1.OrderNum 从排序项目所在的T2中选择ordernum 从T3中选择Orderitem,其中T2.Orderitem=Orderitem,Catid=100 或者使用subjoin更好: 其中不包括a1.OrderNum 从T2 sa2中选择sa2.ordernum,其中sa2.orderitem位于 选择sa3.Orderitem 内部连接sa2.OrderItem=sa3.OrderItem和sa3.Catid=100上的T3 sa3
select *
from T1
where ordernum not in (select ordernum
from t2,t3
where t2.Orderitem=t3.Orderitem
and t3.catid=100)