簡體   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