1

我有这些桌子: TBL_PERSONS- 人用桌子 TBL_SPORTS- 足球、篮球、网球等运动 TBL_PERSON_SPORT用桌子...... - 任何人运动用桌子

例如 Jo 可以玩 Football 和 Basketball 我想创建一个关于人和他们的运动的视图。像这样的东西:

Jo|Football,Basketball
Jack|Football,Tennis

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

4

1 回答 1

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
);

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

于 2012-08-08T12:50:21.397 回答