1
我有这些表: TBL_PERSONS
- 对人 TBL_SPORTS
表 - 为喜欢足球,篮球,网球运动一张桌子和... TBL_PERSON_SPORT
- 对任何人的体育表观多对多表
例如乔可以踢足球和篮球 我想创建一个关于人和他们的运动的视图。 这样的事情:
Jo|Football,Basketball
Jack|Football,Tennis
我该怎么写这样的VIEW? 谢谢。
我有这些表: TBL_PERSONS
- 对人 TBL_SPORTS
表 - 为喜欢足球,篮球,网球运动一张桌子和... TBL_PERSON_SPORT
- 对任何人的体育表观多对多表
例如乔可以踢足球和篮球 我想创建一个关于人和他们的运动的视图。 这样的事情:
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
);
这将产生一个行每运动,包含人的姓名和运动的名称,其中根据需要为每项运动的人是重复多次。
非常感谢。 – alirakiyan 2012-08-08 13:34:07