Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 多个表,消除数据_Sql - Fatal编程技术网

Sql 多个表,消除数据

Sql 多个表,消除数据,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 换

假设有三个表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)