我很难根据另一个表中的字段值排除内部联接表中的整行。这就是我的意思:
不同的ID(TableA内部联接表B)
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
我想要做的是排除内部连接表中具有代码11的ID行,代码表中列出了相同的日期和bldg编号(TableC)。请注意,代码表(TableC)可以具有包含许多不同代码且具有相同日期和/或bldg的ID。在这个例子中,我希望ID 1被排除,但不是ID 4,因为它有不同的日期。
这是第一个表(TableA Inner Join 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
答案 0 :(得分:0)
这将排除Inner表中代码表中具有bldg_nbr和date的代码11行:
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
答案 1 :(得分:0)
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)