我有这些表格:
TBL_PERSONS
- 人员表
TBL_SPORTS
- 适用于足球,篮球,网球等运动的桌子......
TBL_PERSON_SPORT
- 任何人的运动表
Jo|Football,Basketball
Jack|Football,Tennis
我该怎么写这样的VIEW? 感谢。
答案 0 :(得分:1)
如果确实希望它们是以逗号分隔的列表,那就是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
);
这将为每项运动产生一排,包含该人的姓名和运动名称,其中每个运动所需的人数复制多次。