#mysql #sql #inner-join
#mysql #sql #внутреннее соединение
Вопрос:
SELECT Sub_Genre.sgid, Sub_Genre.sgname, Region.rname
FROM Sub_Genre AS S, Region AS R
JOIN Band_Styles AS bSty ON bSty.sgname=S.sgname
JOIN Band_Origins AS bOri ON bOri.bname=bSty.bname
JOIN Country AS C ON C.cname=bOri.cname
JOIN Region ON R.rname=C.rname
ORDER BY S.sgid;
Я пытаюсь создать запрос, чтобы определить, какие поджанры происходят из каких регионов.
Я продолжаю получать код ошибки 1054. Неизвестный столбец ‘Sub_Genre.sgid’ в ‘списке полей’
Комментарии:
1. Вы должны выбрать from
S
, а неSub_Genre
в первой строке, также fromR
, неRegion
Ответ №1:
Не смешивайте явные и неявные объединения. Последовательно используйте стандартные явные соединения.
Таблица region
появляется в запросе дважды, сначала в неявном соединении с псевдонимом, а затем в стандартном соединении без псевдонима. Скорее всего, это не то, что вы хотите.
Столбцы в select
предложении имеют префикс с полным именем таблицы, в то время как таблица имеет псевдоним в from
предложении: это не поддерживается.
Это был бы более чистый способ выразить логику:
select s.sgid, s.sgname, r.rname
from sub_genre s
join band_styles bsty on bsty.sgname = s.sgname
join band_origins bori on bori.bname = bsty.bname
join country c on c.cname = bori.cname
join region r on r.rname = c.rname
order by s.sgid;
Это устраняет проблемы с синтаксисом. Дает ли это правильные результаты или нет, это что-то другое: вы не поделились структурами и данными, с которыми работаете, поэтому я не могу сказать.