#sql #oracle
#sql #Oracle
Вопрос:
Это мой Sql:
SELECT
t.RUFNAME,
count(v_anschrift.rufname) as Anrufe
FROM v_termin,
(
SELECT
RUFNAME
FROM
V_Anschrift
WHERE V_ANSCHRIFT.SPERRKZ = 0
AND V_ANSCHRIFT.OEM != 0
) t
JOIN v_anschrift ON (t.Rufname = v_anschrift.RUFNAME)
LEFT JOIN v_termin ON (v_termin.anschriftid = v_anschrift.anschriftid)
WHERE v_termin.TERMINART = 20
GROUP BY t.RUFNAME;
И я получаю это сообщение об ошибке:
ORA-00918: Spalte nicht eindeutig definiert 00918. 00000 — «column ambiguously defined» *Cause:
*Action: Fehler in Zeile: 15 Spalte: 7
в чем моя ошибка?
Комментарии:
1. Не смешивайте явные и неявные объединения. Переключитесь на современный, явный
JOIN
синтаксис везде! Проще писать (без ошибок), легче читать и поддерживать, и при необходимости легче преобразовать во внешнее соединение.2. В предложении FROM дважды используется v_termin. Намеренно? Используйте разные псевдонимы таблиц.
3. Почему вы дважды подключаетесь к
v_anschrift
? иv_termin
? Ограничение наsperrkz
иoem
может быть легко добавлено к условию объединения. Я не вижу причины для начала выбирать подвыборку.4. Просто: у вас есть a
FROM v_termin
, а затем aLEFT JOIN v_termin
, и вы неправильно называете свои таблицы, поэтому Oracle не может определить, из какой таблицыv_termin.anschriftid =
. Я начал писать исправление, но остановился, потому что в вашем запросе беспорядок, особенно в подзапросе, в котором нет ПРЕДЛОЖЕНИЯ ON.5. Die вы имеете в виду что-то вроде этого: cryptb.in/L7rn
Ответ №1:
Я подозреваю, что вы действительно хотите что-то вроде этого:
SELECT t.RUFNAME, COUNT(*) as Anrufe
FROM v_termin t JOIN
v_anschrift a
ON t.anschriftid = a.anschriftid
WHERE t.TERMINART = 20 AND
a.SPERRKZ = 0 AND
a.OEM <> 0
GROUP BY t.RUFNAME;
У вас повторяющиеся ссылки на таблицы в FROM
предложении — и повторения не имеют очевидной логики.