2016-01-01 4 views
2

реализация этого запроса - ошибка «столбца, неоднозначно заданного». Я знаю, что это имена столбцов RE и экземпляры их дублируются. Невозможно определить, что вызывает ошибку.Oracle SQL - Столбец Неоднозначно определен

SELECT case.case_id, 
    case.client_id, 
    case.description, 
    case.date_filed, 
    case.date_closed, 
    solicitor.solicitor_id, 
    solicitor.first_name, 
    solicitor.surname, 
    SUM(note.time_spent) total_time_spent 
FROM note, case 
INNER JOIN note 
ON note.case_id = case.case_id 
INNER JOIN solicitor 
ON solicitor.solicitor_id = note.solicitor_id 
GROUP BY note.case_id, 
    note.solicitor_id, 
    case.client_id, 
    case.description, 
    case.date_filed, 
    case.date_closed 
ORDER BY note.case_id, 
    case.date_filed; 
+0

* «Я знаю, что имена столбцов RE и экземпляры их дублируются». * - Я не понимаю, что вы подразумеваете под этим. – GolezTrol

+0

Можете ли вы показать полную ошибку? – Atri

+2

Ваш запрос выглядит так, как будто он запутался. Вы присоединяетесь к 'note' на' case', используя старую запись соединения, а затем снова присоединяете «примечание», используя внутреннее соединение «новое» (1992+), но все равно не накладывающееся на него. Поэтому я думаю, что это может быть ваша ошибка. Но кроме того, «case» является ключевым словом, а таблица с этим именем, которая снова не является псевдонимом, делает запрос еще труднее читать. – GolezTrol

ответ

1

Я выглядит как фактическая ошибка заключается в том, что вы используете note таблицу дважды, без наложения его.

0

выполнить запрос

SELECT case.case_id, 
    case.client_id, 
    case.description, 
    case.date_filed, 
    case.date_closed, 
    solicitor.solicitor_id, 
    solicitor.first_name, 
    solicitor.surname, 
    SUM(note.time_spent) total_time_spent 
FROM note, case 
INNER JOIN note 
ON note.case_id = case.case_id 
INNER JOIN solicitor 
ON solicitor.solicitor_id = note.solicitor_id 
GROUP BY case.case_id, 
    case.client_id, 
    case.description, 
    case.date_filed, 
    case.date_closed, 
    solicitor.solicitor_id, 
    solicitor.first_name, 
    solicitor.surname 
ORDER BY note.case_id, 
    case.date_filed; 

Я модифицировал столбцы группы по п.

2

note в статье from. Простое правило: Никогда запятые в разделе from. Затем в предложении GROUP BY должны быть все неагрегированные столбцы в предложении FROM.

Кроме того, таблица псевдонимов будет сделать проще запрос писать и читать:

SELECT c.case_id, c.client_id, c.description, c.date_filed, c.date_closed, 
     s.solicitor_id, s.first_name, s.surname, 
     SUM(n.time_spent)as total_time_spent 
FROM case c INNER JOIN 
    note n 
    ON n.case_id = c.case_id INNER JOIN 
    solicitor s 
    ON s.solicitor_id = n.solicitor_id 
GROUP BY c.case_id, c.client_id, c.description, c.date_filed, c.date_closed, 
     s.solicitor_id, s.first_name, s.surname, 
ORDER BY c.case_id, c.date_filed; 

И case это плохое имя для таблицы, потому что это SQL ключевое слово. Это не зарезервированное слово Oracle, но все равно выглядит неудобно.

Смежные вопросы