繁体   English   中英

MySQL 加入超过 5 个表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM