Я столкнулся с каким-то странным поведением, которое мешает мне настраивать запрос так, как хотелось бы. По достоинству оценят любые идеи. Если какая-либо информация о таблицах будет полезна, сообщите мне. Я просмотрел их, и ничто не выскользнуло на меня, что могло бы вызвать это, но я не знал, что я искал. Вот поведение.Query throws ORA-00904 Недопустимый идентификатор при использовании объединений
Это прекрасно работает:
Select *
From
SCHEMA_A.TABLE_A a,
SCHEMA_B.TABLE_B b,
SCHEMA_C.TABLE_C c,
SCHEMA_A.TABLE_D d
Where
b.friend_id = c.friend_id
AND a.group_id = d.group_id
AND b.group_cd = d.group_cd
Но это возвращает ORA-00904: b.friend_id = c.friend_id: неверный идентификатор
Select *
From
SCHEMA_A.TABLE_A a,
SCHEMA_B.TABLE_B b,
SCHEMA_A.TABLE_D d
Join
SCHEMA_C.TABLE_C c
On
b.friend_id = c.friend_id
Where
a.group_id = d.group_id
AND b.group_cd = d.group_cd
Это возвращает ORA-00904: b.group_cd = d .group_cd: неверный идентификатор
Select *
From
SCHEMA_A.TABLE_A a,
SCHEMA_B.TABLE_B b
Join
SCHEMA_C.TABLE_C c
On
b.friend_id = c.friend_id
Join
SCHEMA_A.TABLE_D d
On
a.group_id = d.group_id
AND b.group_cd = d.group_cd
И это снова работает:
Select *
From
SCHEMA_A.TABLE_A a,
SCHEMA_B.TABLE_B b
Join
SCHEMA_C.TABLE_C c
On
b.friend_id = c.friend_id
Join
SCHEMA_A.TABLE_D d
On
b.group_cd = d.group_cd
Where
a.group_id = d.group_id
И поэтому вы не должны смешивать старые соединения типа Oracle с соответствующими ANSI, поскольку порядок соединения и область видимости становятся еще менее ясными ... придерживаться того или другого, предпочтительно ANSI * 8-) –