TSQl根据表B中给定的条件排除表A中的所有记录

时间:2016-09-04 16:00:47

标签: sql sql-server tsql

我决定写这个主题,因为我正在努力解决一个问题而且我没有得到任何进一步的信息。 我有两张桌子: - 客户表 - 装运表 在客户表(表A)中有许多客户端,如下所示

|---------------------|------------------|
|     ClientID        |     CliendCode   |
|---------------------|------------------|
|          1          |         ABC      |
|          2          |         DEF      |
|          3          |         GHI      |

..并且在装运表(表B)中存储了所有装运记录和客户对应的ID。

|---------------------|------------------|
|     ShipmentID      |     CliendID     |
|---------------------|------------------|
|          100        |         ABC      |
|          101        |         ABC      |
|          102        |         GHI      |
|          301        |         DEF      |
|          302        |         GHI      |
|          303        |         GHI      |

我想要实现的是从表A和表B中提取数据并获取ShipemtnID不从“10”开始的那些客户和货物的详细信息(如果至少有一个shipmentid,则基本上排除所有客户端从'10'开始记录装运表 在这种情况下,我看的结果将是。

|     ShipmentID      |     CliendID     |
|---------------------|------------------|
|          301        |         DEF      |

我尝试过应用外部,存在和其他语句,但它们都没有提供准确的数据。 我将非常感谢您提供的任何帮助,因为我需要尽快完成此报告。

2 个答案:

答案 0 :(得分:1)

您似乎想要not existsnot in

select s.*
from shipments s
where s.clientid not in (select s2.clientid
                         from shipments s2
                         where s2.shipmentid like '10%'
                        );

答案 1 :(得分:0)

尝试使用以下查询..

  select sh.ShipmentId,sh.ClientId
  from shipments sh
  where not exists(select 1
                     from shipments sh1
                     where sh.clientId = sh1.clientId
                       and sh1.shipmentid like '10%'
                    );