在许多对许多表的看法

时间:2012-08-08 12:46:29

标签: mysql view

我有这些表格: TBL_PERSONS - 人员表 TBL_SPORTS - 适用于足球,篮球,网球等运动的桌子...... TBL_PERSON_SPORT - 任何人的运动表

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

Jo|Football,Basketball
Jack|Football,Tennis

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

1 个答案:

答案 0 :(得分: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
);

这将为每项运动产生一排,包含该人的姓名和运动名称,其中每个运动所需的人数复制多次。