用户输入加入三个表

时间:2017-03-30 13:41:04

标签: mysql sql select join group-concat

我有三个表,A,B,C。表B在A& A中都有外键。 C. A& C没有钥匙。

我正在尝试编写一个查询,其中我从表C中的列获得每个命中,其主键(B中的外键)与表A中的主键(也是B中的外键)匹配。一个问题是,我试图根据用户输入获取此信息,这将是表A中的单独列。

示例:

TABLE A
-------
aID    aName
1      Squeakers
2      Formations
3      Hutsis
4      Pms

TABLE B
-------
bID    aID    cID
1      1      27930
2      1      21405
3      1      24013
4      2      21111
5      1      34100
6      1      20841
7      4      30001

TABLE C
-------
cID      cName
21405    Silver Flyer
27930    Babs McGee
30001    Jimmy McGill
24013    Fletcher Mason
21111    Spike Fester
34100    Hope Sisco
20841    Ellis Traeger

所以我希望用户输入'Squeakers',然后得到类似的内容:

Squeakers – Babs McGee, Silver Flyer, Fletcher Mason, Hope Sisco, Ellis Trager

我已经被困在这几天了,无法弄清楚语法。我不确定我是否需要一个子查询,或者它不是所有INNER JOINS?

3 个答案:

答案 0 :(得分:0)

您可以使用 JOIN GROUP_CONCAT()来加入所有表,并将所有cName放在一行中。

试试这个:

SELECT GROUP_CONCAT(C.cName) AS cNames
FROM TableA A 
INNER JOIN TableB B ON A.aID = B.aID 
INNER JOIN TableC C ON B.cID = C.cID
WHERE A.aName = 'Squeakers';

答案 1 :(得分:0)

SELECT aName, GROUP_CONCAT(cName SEPARATOR ', ') as cNames
FROM A 
INNER JOIN B 
ON A.aID = B.aID
INNER JOIN C
ON B.cID = C.cID
GROUP BY aName, A.aID

您将获得两列 - 一列带有aName,另一列带有聚合的cNames,逗号分隔。我目前的PC上没有MySQL,但它或多或少会像这样工作。

答案 2 :(得分:0)

A - 作者(每位作者一行) Author_Id,Author_Name,Author_Country

B - Author_Books(作者和书籍之间的关系表,每个关系一行) AB_ID,Author_ID,Book_ID

C - 书籍(每本一行) Book_ID,Book_Name

现在,查询将是

Select a.Author_Name,b.Book_Name
from Author a, Author_Books B, Books C
where a.author_id =b.Author_ID
and B.Book_ID = C.Book_ID
and a.Author_Country = ? //This is your squeaker clause