Plsql How IN子句在此子查询中工作
此查询返回Plsql How IN子句在此子查询中工作,plsql,oracle11g,Plsql,Oracle11g,此查询返回分支\u M表中的所有记录 然而,BRANCH\u S表中不存在分支列 表BRANCH\u M有列(ID、BRANCH、SUBBRANCH) 表分支机构有列(SID,部门) 当我运行查询时,输出是 BRANCH_M ID, BRANCH, SUBBRANCH 10 Engg CS 10 Engg ME 20 Mtech EE BRANCH_S SID, DEPT 1 CS 2 IS 请您解释一下这是使用子查询时非常常见的错误。 如果分支机构中没有子
分支\u M
表中的所有记录
然而,BRANCH\u S
表中不存在分支列
表BRANCH\u M
有列(ID、BRANCH、SUBBRANCH)
表分支机构
有列(SID,部门)
当我运行查询时,输出是
BRANCH_M
ID, BRANCH, SUBBRANCH
10 Engg CS
10 Engg ME
20 Mtech EE
BRANCH_S
SID, DEPT
1 CS
2 IS
请您解释一下这是使用子查询时非常常见的错误。
如果
分支机构
中没有子分支机构
列,则Oracle会在外部查询中查找该列。因此,查询变成:
BRANCH
Engg
Engg
Mtech
where
条件的计算结果为true(除了branch\u s
表为空或branch\u m.subbranch
包含空值的情况,这是另一种情况)。要避免此问题,请始终使用别名:
SELECT branch
FROM branch_m
WHERE branch_m.subbranch IN (SELECT branch_m.subbranch FROM branch_s)
如果分支
中没有子分支
,而不是一个看似正常但错误的查询,那么您将立即得到错误。你总是用别名,这样你就不会头疼了
SELECT branch
FROM branch_m
WHERE branch_m.subbranch IN (SELECT branch_m.subbranch FROM branch_s)
SELECT m.branch
FROM branch_m m
WHERE m.subbranch IN (SELECT s.subbranch FROM branch_s s)