2012-08-08 45 views
1

我有这些表: TBL_PERSONS - 对人 TBL_SPORTS表 - 为喜欢足球,篮球,网球运动一张桌子和... TBL_PERSON_SPORT - 对任何人的体育表观多对多表

例如乔可以踢足球和篮球 我想创建一个关于人和他们的运动的视图。 这样的事情:

Jo|Football,Basketball 
Jack|Football,Tennis 

我该怎么写这样的VIEW? 谢谢。

回答

1

如果你确实希望它们成为逗号分隔的列表,那就是GROUP_CONCAT()集合函数的功能。用您的列的正确名称代替nameperson_idsport_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 
); 

这将产生一个行每运动,包含人的姓名和运动的名称,其中根据需要为每项运动的人是重复多次。

+0

非常感谢。 – alirakiyan 2012-08-08 13:34:07