【发布时间】:2012-08-05 13:58:27
【问题描述】:
我有这些表:
TBL_PERSONS - 人桌
TBL_SPORTS - 适合足球、篮球、网球等运动的桌子......
TBL_PERSON_SPORT - 任何人的运动表
例如 Jo 可以踢足球和篮球 我想创建一个关于人和他们的运动的视图。 像这样:
Jo|Football,Basketball
Jack|Football,Tennis
我应该怎么写这样的VIEW? 谢谢。
【问题讨论】:
我有这些表:
TBL_PERSONS - 人桌
TBL_SPORTS - 适合足球、篮球、网球等运动的桌子......
TBL_PERSON_SPORT - 任何人的运动表
例如 Jo 可以踢足球和篮球 我想创建一个关于人和他们的运动的视图。 像这样:
Jo|Football,Basketball
Jack|Football,Tennis
我应该怎么写这样的VIEW? 谢谢。
【问题讨论】:
如果您真的希望它们是逗号分隔的列表,那就是 GROUP_CONCAT() 聚合函数的功能。用正确的列名称代替 name、person_id、sport_id 等...
CREATE VIEW PERSON_SPORTS AS
(
SELECT
p.name,
GROUP_CONCAT(s.sport_name) AS sports
FROM
TBL_PERSONS p
LEFT JOIN TBL_PERSON_SPORT sp ON p.person_id = sp.person_id
JOIN TBL_SPORTS s ON sp.sport_id = s.sport_id
GROUP BY p.name
);
但是,如果您需要能够从逗号分隔的列表中分离出运动,上述内容对于加入对抗并不是很有用。还可以考虑将未分组的列表包装在视图中:
CREATE VIEW PERSON_SPORTS AS
(
SELECT
DISTINCT
p.name,
s.sport_name AS sport
FROM
TBL_PERSONS p
LEFT JOIN TBL_PERSON_SPORT sp ON p.person_id = sp.person_id
JOIN TBL_SPORTS s ON sp.sport_id = s.sport_id
);
这将为每项运动生成一行,其中包含人的姓名和运动名称,其中该人根据每项运动的需要重复多次。
【讨论】: