代码之家  ›  专栏  ›  技术社区  ›  TerrorAustralis

替代不存在

  •  2
  • TerrorAustralis  · 技术社区  · 16 年前

    我有两个由ID列链接的表。我们称之为表A和表B。我的目标是找到表A中所有在表B中没有记录的记录。例如:

    **Table A:**  
    ID    Value  
    --    -------
    1     value1  
    2     value2  
    3     value3  
    4     value4
    
    **Table B**  
    ID    Value  
    --    -------
    1     x  
    2     y  
    4     z  
    4     l
    

    如您所见,ID=3的记录在表B中不存在,因此我需要一个从表A中给出记录3的查询。我目前的方法是 AND NOT EXISTS (SELECT ID FROM TableB where TableB.ID = TableA.ID) 但由于桌子很大,所以这方面的表现很糟糕。另外,当我尝试使用tableb.id为空的左联接时,它也不起作用。有人能提出替代方案吗?

    3 回复  |  直到 16 年前
        1
  •  4
  •   Pranay Rana    16 年前

    尝试 Not IN

    AND tablea.id NOT In (SELECT ID FROM TableB)
    

    检查更多 http://www.java2s.com/Code/SQLServer/Select-Query/NOTIN.htm

        2
  •  1
  •   ggalmazor    10 年前

    你可以换成

    SELECT 
      a.ID, 
      a.Value
    FROM Table_A AS a
    LEFT JOIN Table_B AS b ON a.ID = b.ID     
    WHERE b.ID IS NULL
    

    这个解决方案应该比 IN() EXISTS() 选择。来源 here

        3
  •  0
  •   onedaywhen    14 年前
    SELECT ID 
      FROM Table_A
    EXCEPT
    SELECT ID 
      FROM Table_B; 
    
    推荐文章