Sql 如果TableB.Number=27,则不包括任何TableA.ID
我有两张桌子Sql 如果TableB.Number=27,则不包括任何TableA.ID,sql,oracle,oracle11g,where-clause,Sql,Oracle,Oracle11g,Where Clause,我有两张桌子 TableA Table2 ------ ------- ID Number ID是父项,这意味着每个TableA.ID可以有多个Number 范例 TableA.ID Table2.Number --------- ------------- 123456 27 123456 13 123456 1 123456 11
TableA Table2
------ -------
ID Number
ID是父项,这意味着每个TableA.ID可以有多个Number
范例
TableA.ID Table2.Number
--------- -------------
123456 27
123456 13
123456 1
123456 111
222222 32
222222 93
333333 27
333333 44
443333 27
443334 66
443334 22
443336 27
如果数字为27,则不查询任何ID
输出应为
TableA.ID Table2.Number
--------- -------------
222222 32
222222 93
443334 66
443334 22
谢谢您可以用一个简单的
来完成,如下所示:
SELECT
a.ID, b.Number
FROM
TableA a
JOIN TableB b ON a.ID=b.ID
WHERE NOT EXISTS (
SELECT * FROM TableB x WHERE x.ID=a.ID AND x.Number=27
)
EXISTS
语句有一个子查询,再次引用TableB
。请注意,它使用了不同的别名(即,x
而不是b
)。尝试类似的方法(假设table2有一个带有tableA.id的列)
这些桌子是怎样装订的?他们之间有什么关系吗?对不起,他们之间的共同点是TableA.ID=TableB.ID
对不起,但它仍然告诉我,ID与27
BWS的答案有效,因为他在内部/子查询中也有连接。@user206168 BWS的查询有一个连接,因为它需要带a.ID
。此查询没有联接,因为它不是必需的。我确信这与从这个骨架查询转换为真实查询有关:这种方法应该工作得非常好。@user206168…而且它工作得非常好-。我不知道为什么它不工作。我不认为我在转换为真正的查询时犯了错误。我仔细检查了一下。
select tablea.id,table2.number
from tablea join table2 on tablea.id = table2.a_id
where tablea.id NOT IN
(select tablea.id from tablea join table2 on tablea.id = table2.a_id
Where table2.Number = 27)
order by tablea.id,table2.Number