[英]MySQL Join Over 5 tables
我们有这 5 个不同的 MySQL 表:
桌上俱乐部
Id | ClubName | CityId
---+----------+--------
1 | Test | 1
表城
Id | CityName | CountryId
---+----------+-----------
1 | London | 1
表国家
Id | CountryName
---+------------
1 | UK
表格类型
Id | GenreName
---+-----------
1 | Rock
2 | Classic
3 | Techno
桌俱乐部2流派
ClubId | GenreId
-------+--------
1 | 1
1 | 2
1 | 3
预期的结果是这样的:
ClubId | Club | City | Country | Music
-------+------+--------+---------+---------------------
1 | Test | London | UK | Rock,Classic,Techno
使用以下查询
SELECT
club.Id AS ClubId,
club.ClubName AS Club,
GROUP_CONCAT(genre.GenreName) as Music
FROM
club
INNER JOIN club2genre
ON club2genre.clubid = club.id
INNER JOIN genre
ON genre.id = club2genre.genreid
GROUP BY
club.Id;
我设法得到以下结果:
ClubId | Club | Music
-------+------+-------------------
1 | Test | Rock,Classic,Techno
然而,我现在已经尝试了几个小时以某种方式将城市和国家与结果联系起来,但像这样:
SELECT
club.Id,
club.ClubName AS Name,
city.CityName AS City,
country.CountryName AS Country,
CONCAT(genre.GenreName) as Music
FROM
club, city, country
INNER JOIN club2genre
ON club2genre.clubid = club.id
INNER JOIN genre
ON genre.id = club2genre.genreid
WHERE
club.CityId = city.Id AND city.CountryId = country.Id;
不起作用,MySQL 只是抛出错误,如ERROR: 1054 (42S22): Unknown column 'club.id' in 'on clause'
。 再说一次,在这一点上,我更多的是猜测而不是实际知道我在做什么。 我想我必须在那里抛出更多的连接? 我对 MySQL 不太熟悉,自从我接触 SQL 以来已经有很长时间了,所以任何帮助都将不胜感激。
您正在混合显式和隐式连接语法。仅使用显式。
此外,您应该正确 GROUP BY 没有聚合函数的 SELECT 子句中的所有列
这给出了:
SELECT
club.Id,
club.ClubName AS Name,
city.CityName AS City,
country.CountryName AS Country,
CONCAT(genre.GenreName) as Music
FROM
club
INNER JOIN city
ON club.CityId= city.id
INNER JOIN country
ON country.Id= city.CountryId
INNER JOIN club2genre
ON club2genre.clubid = club.id
INNER JOIN genre
ON genre.id = club2genre.genreid
GROUP BY
club.Id, club.ClubName, city.CityName, country.CountryName;
使用 INNER JOINS 而不是 comas repsresetnt 的交叉连接
SELECT
club.Id,
club.ClubName AS Name,
MIN(city.CityName) AS City,
MIN(country.CountryName) AS Country,
GROUP_CONCAT(genre.GenreName) as Music
FROM
club
INNER JOIN city ON club.CityId = city.Id
INNER JOIN country ON city.CountryId = country.Id
INNER JOIN club2genre
ON club2genre.clubid = club.id
INNER JOIN genre
ON genre.id = club2genre.genreid
GROUP BY
club.Id,club.ClubName
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.