我有这些桌子:
TBL_PERSONS
- 人用桌子
TBL_SPORTS
- 足球、篮球、网球等运动
TBL_PERSON_SPORT
用桌子...... - 任何人运动用桌子
例如 Jo 可以玩 Football 和 Basketball 我想创建一个关于人和他们的运动的视图。像这样的东西:
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
);
这将为每项运动生成一行,其中包含人的姓名和运动名称,其中该人根据每项运动的需要重复多次。