Создайте запрос, чтобы определить, какие поджанры происходят из каких регионов

#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 в первой строке, также from R , не 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;
 

Это устраняет проблемы с синтаксисом. Дает ли это правильные результаты или нет, это что-то другое: вы не поделились структурами и данными, с которыми работаете, поэтому я не могу сказать.