繁体   English   中英

SQL-根据另一个表中的字段值排除行

[英]SQL - Exclude rows based on field value in another table

我很难根据另一个表中的字段值排除内部联接表中的整个行。 这就是我的意思:

不同的ID(TableA内联接TableB)

    ID    |     Date     |    Bldg_Nbr   
----------+--------------+------------------
     1    |  10/20/2014  |       92       
     2    |  10/20/2014  |       92      
     3    |  10/20/2014  |       92       
     4    |  10/20/2014  |       92       
     5    |  10/20/2014  |       92       

代码表(TableC)

    ID    |     Date     |    Code    |    Bldg_Nbr   
----------+--------------+------------+----------------
     1    |  10/20/2014  |     11     |       92
     1    |  10/20/2014  |     02     |       45
     3    |  10/20/2014  |     15     |       85
     3    |  10/20/2014  |     95     |       66
     4    |  10/21/2014  |     11     |       92

我想做的是排除“内部联接”表中的ID行,这些ID行的代码11与代码表(TableC)中列出的日期和bldg号相同。 请注意,代码表(TableC)的ID可以包含具有相同日期和/或日期的许多不同代码。 在此示例中,我希望排除ID 1,但不包括ID 4,因为它具有不同的日期。

这是起作用的第一个表(TableA内连接TableB)的代码; 我只需要合并TableC约束:

SELECT DISTINCT 
          I.DATE,
          I.BLDG_NBR,
          I.ID
FROM TableA I 
INNER JOIN TableB D ON I.ID = D.ID  
WHERE I.DATE = '20-OCT-2014' AND I.BLDG_NBR = 92 

这将排除内部表中的代码11行,这些行在代码表中具有bldg_nbr和日期:

SELECT DISTINCT 
    I.DATE, 
    I.BLDG_NBR, 
    I.ID    
FROM TableA I INNER JOIN TableB D 
    ON I.ID = D.ID
    AND I.Bldg_Nbr = D.Bldg_Nbr
    AND I.Date = D.Date
    AND D.Code != 11

WHERE I.DATE = '20-OCT-2014' 
AND I.BLDG_NBR = 92 
SELECT DISTINCT I.DATE, I.BLDG_NBR, I.ID
FROM TableA I
     INNER JOIN TableB D ON I.ID = D.ID
WHERE I.DATE = TO_DATE('20-10-2014', 'DD-MM-YYYY') AND I.BLDG_NBR = 92 
  AND NOT EXISTS (SELECT 1 FROM TableC C WHERE C.ID = I.ID AND I.DATE = C.DATE AND I.BLDG_NBR = C.BLDG_NBR AND C.CODE = 11)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM