SQL "Где существует" с несколькими таблицами с псевдонимами - PullRequest
1 голос
/ 18 ноября 2011

Пример запроса:

Select id, id_dtm
From tableA 
Where exists (
 Select 1 
 From tableB b, tableC c, tableD d
 Where b.id = id
 And b.id_dtm = id_dtm
 And b.id = c.id
 And c.id = d.id);

Проблема с вышеуказанным запросом состоит в том, что все 4 таблицы имеют столбцы с именами id и id_dtm.Когда я запускаю его, я получаю сообщение об ошибке, говорящее о том, что столбцы ORA-00918: столбец неоднозначно определены

Я мог бы исправить это, используя псевдоним в tableA, но проблема в том, что запрос генерируется динамически.Часть where exists создается где-то еще, а бит перед тем, как она будет объединена позже, поэтому я не могу использовать псевдоним, как сейчас.

Можно ли как-нибудь использовать id и id_dtm из tableA внутри предложения where exists без использования псевдонима для tableA?

База данных Oracle10G

Ответы [ 3 ]

6 голосов
/ 18 ноября 2011

Напишите название таблицы tableA:

Select id, id_dtm
From tableA 
Where exists (
 Select 1 
 From tableB b, tableC, tableD
 Where tableB.id = tableA.id
 And tableB.id_dtm = tableA.id_dtm
 And tableB.id = tableC.id
 And tableC.id = tableD.id)
1 голос
/ 18 ноября 2011

Я не знаю ваших точных настроек, но почему вы не можете установить псевдоним на внешней таблице? Он не должен отражать фактическую используемую таблицу, просто псевдоним ее с «внешним» или что-то. Использование, которое во внутреннем запросе, вы уже знаете, что id существует в любой таблице, используемой снаружи, поэтому external.id будет работать нормально.

0 голосов
/ 17 августа 2016

Поля в подзапросе, которые ссылаются на tableA (т.е. id и id_dtm), также существуют в других таблицах, и поэтому они неоднозначны. Решите это, добавив префикс к псевдониму, данному tableA:

Select A.id, A.id_dtm
From tableA A 
Where exists (
 Select 1 
 From tableB b, tableC c, tableD d
 Where b.id = A.id
 And b.id_dtm = A.id_dtm
 And b.id = c.id
 And c.id = d.id);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...