[英]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.