Table: A Table: B Table: C
------------ ---------------- -------------
P_id | G_id P_id | Name G_id | Title
------------ ---------------- -------------
1 | 1 1 | john 1 | php
2 | 1 2 | jack 2 | sql
3 | 2 3 | sam
现在我正在查询:
Select B.name, C.title
from B inner join A on...
inner join c on...
如果我们在这里输入john,那么它将显示如下:
john php.
但我希望将它显示为:
john jack php.
因为约翰和杰克的G_id是相同的 我怎么能这样做?
答案 0 :(得分:1)
伪代码(类似于mysql):
SELECT B.name, C.title
FROM B
INNER JOIN A ON A.P_id = B.P_id
INNER JOIN C ON A.G_id = C.G_id
WHERE A.G_id = (
SELECT A.G_id
FROM B
INNER JOIN A ON A.P_id = B.P_id
WHERE B.Name LIKE '%John%' LIMIT 1
);
修改
这会使您的结果按名称搜索,使用{b> Everton Agner 建议的GROUP_CONCAT和GROUP BY来正确格式化结果。
答案 1 :(得分:1)
您需要聚合函数才能使用此类分组。我不熟悉MySQL,但是使用group_concat()函数尝试非常类似的东西:
select
group_concat(b.Name),
c.Title
from
A a
join B b on b.P_id = a.P_id
join C c on c.G_id = a.G_id
group by
c.Title
希望它能告诉你“约翰,杰克”
在此处查看有关聚合函数的文档:http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html
- 编辑
刚试过它,它给了我以下输出:
+----------------------+-------+
| group_concat(b.Name) | Title |
+----------------------+-------+
| john,jack | php |
| sam | sql |
+----------------------+-------+
我希望你想要的是:)
- 编辑(最后一个)
现在我想我明白了你想要的东西,只需添加having group_concat(b.Name) like '%john%'
,它就会只给你john
所包含的群组...更好的选择是array contains
功能,但我还没找到。
+----------------------+-------+
| group_concat(b.Name) | Title |
+----------------------+-------+
| john,jack | php |
+----------------------+-------+