首页 > 解决方案 > 创建查询以确定哪些 sub_genres 来自哪些区域

问题描述

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;

我正在尝试创建一个查询来确定哪些 sub_genres 来自哪些地区。我不断收到错误代码 1054。“字段列表”中的未知列“Sub_Genre.sgid”

标签: mysqlsqlinner-join

解决方案


不要混合显式和隐式连接。一致地使用标准的显式连接。

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;

这解决了语法问题。这是否给出了正确的结果是另一回事:你没有分享你正在使用的结构和数据,所以我不能说。


推荐阅读