2
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.   

因为 john 和 jack 的 G_id 相同。
我怎样才能做到这一点?

4

2 回答 2

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
               );

编辑:

这将使您的结果可以按名称搜索,按照Everton Agner的建议使用GROUP_CONCAT和 GROUP BY来正确格式化结果。

于 2011-08-19T10:38:24.610 回答
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   |
+----------------------+-------+
于 2011-08-19T11:22:29.700 回答