【问题标题】:I need some SQL help trying to find what is not in a table我需要一些 SQL 帮助来尝试查找表中没有的内容
【发布时间】:2015-08-04 17:33:35
【问题描述】:

我需要一些帮助。我试过了,但它不起作用。 我选择了我需要的所有数据并试图说出没有的数据 原始文件。

谁能告诉我正确的方法?

 SELECT * 
    FROM acknowledgement t1
    where t1.st01 = '110' 
    and (t1.shipment ='S640D14268424' or t1.Shipment ='S640D14268924' or
      t1.Shipment ='S640D14268925' or t1.Shipment ='S646D14261190' or
      t1.Shipment ='S646I14265886' or t1.Shipment ='S640D14268423' ...)
   AND [shipment] 
   NOT IN(
   SELECT [shipment] FROM acknowledgement 
   )

任何帮助都会很有用。

【问题讨论】:

  • 什么 ru 试图实现..你的最后一个条件是选择所有未确认发货的行......并且你从同一个表中获取数据..所以它总是没有记录跨度>
  • 我选择了一些不在表格中的记录。我想尝试查找该表中不存在的相同记录,而不是一次执行 1 个。
  • 你可以说t1.Shipment in ('S640D14272953', 'S640D14276996' ... ),它也一样,字符更少,看起来更好。
  • 如何在确认表中找到不在查找确认表中的货件?
  • 你应该改进你的问题。你在做什么,你希望得到什么?

标签: sql sql-server tsql


【解决方案1】:

您正在寻找类似的东西:

SELECT * FROM (
 SELECT  'S640D14268424' AS Shipment
 UNION SELECT  'S640D14268924'
 UNION SELECT  'S640D14268925' 
 UNION SELECT  'S646D14261190'
 UNION SELECT  'S646I14265886'  
 UNION SELECT  'S640D14268423'  
 UNION SELECT  'S646D14269951'
 UNION SELECT  'S646D14269939'
 UNION SELECT  'S646D14269034'  
 UNION SELECT  'S646D14269962'
 UNION SELECT  'S646D14269953'
 UNION SELECT  'S646D14271620'
 UNION SELECT  'S646D14269030'
 UNION SELECT  'S646D14269941'
 UNION SELECT  'S646D14269251'
 UNION SELECT  'S646D14273089'
 UNION SELECT  'S646D14272388'
 UNION SELECT  'S646D14273197'
 UNION SELECT  'S646D14273399'
 UNION SELECT  'S640D14273543'
 UNION SELECT  'S640D14272952'
 UNION SELECT  'S640D14272953'
 UNION SELECT  'S640D14276996'
 UNION SELECT  'S640D14277005'
 UNION SELECT  'S640D14277006'
 UNION SELECT  'S646D148047394'
 UNION SELECT  'S640D14277004'
 UNION SELECT  'S646D158049311'
 UNION SELECT  'S646D158049791'
 UNION SELECT  'S646D158049797'
 UNION SELECT  'S646D158049806'
 UNION SELECT  'S646D158049781'
 UNION SELECT  'S646D158049557'
 UNION SELECT  'S646D158049064'
 UNION SELECT  'S646D158049561'
 UNION SELECT  'S646D158049794'
 UNION SELECT  'S646D158049362'
 UNION SELECT  'S646D158049361'
 UNION SELECT  'S646D158049792'
 UNION SELECT  'S646D158049808'
 UNION SELECT  'S646D158049788'
 UNION SELECT  'S646D158049365'
 UNION SELECT  'S646D158049800'
 UNION SELECT  'S646D158049790'
 UNION SELECT  'S646D158049799'
 UNION SELECT  'S646D158049803'
 UNION SELECT  'S646D158049784'
 UNION SELECT  'S646D158049522'
 UNION SELECT  'S646D158049340'
 UNION SELECT  'S646D158049796'
 UNION SELECT  'S646D158049687'
 UNION SELECT  'S646D158049491'
 UNION SELECT  'S646D158049499'
 UNION SELECT  'S646D158049484'
 UNION SELECT  'S646D158049486'
 UNION SELECT  'S646D158049494') numbers_to_look
 WHERE Shipment NOT IN 
 (SELECT [shipment] FROM acknowledgement WHERE shipment>'' ) 

更好的方法是创建一个临时表来存储您要检查的数字。

【讨论】:

  • 那个例子看起来不错,我复制了它并尝试了它,但没有成功。我知道前 5 条记录不存在,而其他一些记录存在。那至少应该向我展示前 5 条记录。但是当我运行这个示例时,它发现 0 。
  • 您的确认表中是否有空货件值?如果是这样,请在第二个子查询中添加 WHERE Shipment>''(或 IS NOT NULL)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-26
  • 2010-10-23
  • 2011-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多