SQL - неверный идентификатор, но где? - PullRequest
2 голосов
/ 05 марта 2012

Я довольно новичок в SQL, и я часами пытаюсь потренироваться, в чем проблема с этим:

SELECT COUNT (DISTINCT c.BAND_ID)Number_of_bands, COUNT(DISTINCT c.COMP_ID)"Total_Competitions",g.NAME GENRE_TYPE
FROM ENTERED_COMPS ec,COMPETITIONS c,GENRE g
WHERE c.COMP_ID = ec.COMP_ID
AND g.GENRE_ID = c.GENRE_ID
AND c.BAND_ID = b.BAND_ID
GROUP BY GENRE_TYPE
ORDER BY GENRE_TYPE ASC;

Oracle just comes up with the error 
ORA-00904: "GENRE_TYPE": invalid identifier
00904. 00000 -  "%s: invalid identifier"
*Cause:    
*Action:
Error at Line: 6 Column: 9

Что заставляет меня думать, что должна быть проблема с GENRE.NAMEстолбец .... с неправильным или ошибочным именем.Однако это не тот случай ..

Я пытаюсь получить запрос для анализа сравнительной популярности жанров, выводя их в алфавитном порядке и показывая, сколько конкурсов каждого жанра проводится и сколько групп приняли участие в конкурсах.каждого жанра.

Чтобы сделать это немного проще, вот ссылка на мой ERD - http://www.missingstudios.com/matt/ERD%20Logical.pdf

Поддержка будет принята с благодарностью!

Ответы [ 3 ]

5 голосов
/ 05 марта 2012

Попробуйте оставить псевдоним в ваших group by и order by предложениях

SELECT COUNT (DISTINCT c.BAND_ID) Number_of_bands, 
       COUNT(DISTINCT c.COMP_ID) Total_Competitions, 
       g.NAME GENRE_TYPE
FROM ENTERED_COMPS ec,COMPETITIONS c,GENRE g
WHERE c.COMP_ID = ec.COMP_ID
AND g.GENRE_ID = c.GENRE_ID
AND c.BAND_ID = b.BAND_ID
GROUP BY g.NAME
ORDER BY g.NAME ASC;
1 голос
/ 05 марта 2012

Проблема заключается в том, что псевдонимы столбцов, введенные в список выбора, нельзя использовать в предложениях GROUP BY и ORDER BY.Вы также ссылаетесь на псевдоним таблицы 'b', который отсутствует в предложении FROM.

SELECT COUNT(DISTINCT c.BAND_ID) Number_of_bands,
       COUNT(DISTINCT c.COMP_ID) "Total_Competitions",
       g.NAME GENRE_TYPE
  FROM ENTERED_COMPS ec
  JOIN COMPETITIONS  c  ON c.COMP_ID  = ec.COMP_ID
  JOIN GENRE         g  ON g.GENRE_ID = c.GENRE_ID
  JOIN BAND          b  ON c.BAND_ID  = b.BAND_ID
 GROUP BY g.NAME
 ORDER BY g.NAME ASC;

Некоторые варианты SQL допускают использование псевдонимов в предложении ORDER BY;некоторые могут позволить им более широко.Это источник путаницы.(Некоторые СУБД следуют стандарту SQL и допускают AS между именами таблиц и псевдонимами; Oracle - нет.)

Пожалуйста, обсудите со своим преподавателем, почему вас учили архаичной неявной нотации объединения;Вы должны изучать его только для того, чтобы понять старый SQL, который вы не меняете, а не для того, чтобы писать новый SQL.Вы должны всегда использовать явную запись соединения (как показано выше) в новых операторах SQL.

0 голосов
/ 05 марта 2012

Предполагая, что ваш ERD является точным, сообщение об ошибке точно. GENRE_TYPE - неверный идентификатор. Это не в вашем ERD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...