【问题标题】:View on Many To Many Tables查看多对多表
【发布时间】:2012-08-05 13:58:27
【问题描述】:

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

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

Jo|Football,Basketball
Jack|Football,Tennis

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

【问题讨论】:

    标签: mysql 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
    );
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-28
      • 1970-01-01
      • 2021-03-16
      • 1970-01-01
      • 2010-09-12
      • 1970-01-01
      相关资源
      最近更新 更多