我在简单连接时遇到了问题:
SELECT *
FROM worker wo
WHERE EXISTS (
SELECT wp.id_working_place
FROM working_place wp
JOIN working_place_worker wpw ON ( wp.id_working_place = wpw.id_working_place
AND wpw.id_worker = wo.id_worker)
)
我遇到的错误是ORA-00904: "WO"."ID_WORKER": not valid identifier
.
然后我决定将表的并集从join
条款至where
clause:
SELECT *
FROM worker wo
WHERE EXISTS (
SELECT wp.id_working_place
FROM working_place wp
JOIN working_place_worker wpw ON ( wp.id_working_place = wpw.id_working_place)
WHERE wpw.id_worker = wo.id_worker
)
最后一个查询works
完美的。
为什么不可能在join
?该表应该像在中一样可见where
条款。我错过了什么吗?
In
FROM working_place wp
JOIN working_place_worker wpw ON ...
WHERE ...
the ON
条款指的是only到参与连接的两个表,即wp
and wpw
。外部查询中的名称对其不可见。
The WHERE
子句(及其表弟HAVING
是外部查询与子查询关联的方式。来自外部查询的名称are对它可见。
为了方便大家记住,
- ON 是关于 JOIN,两个表如何关联形成一行(或多行)
- WHERE 是关于选择标准,行必须通过的测试
虽然 SQL 解析器将在 ON 子句中接受文字(不是列名),但它会在对联接外部的列的引用处绘制线条。您可以将此视为防止错误的恩惠。
就你而言,wo
表不属于JOIN
,并被拒绝。它is整个查询的一部分,并且被识别WHERE
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)