1

私はこれらのテーブルを持っています : TBL_PERSONS- 人用のテーブル TBL_SPORTS- サッカー、バスケットボール、テニスなど TBL_PERSON_SPORTのスポーツ用のテーブル ... - あらゆる人のスポーツ用のテーブル

たとえば、Jo は Football をプレーでき、Basketball は人物とそのスポーツに関する VIEW を作成したいと考えています。このようなもの:

Jo|Football,Basketball
Jack|Football,Tennis

そのような VIEW はどのように記述すればよいですか? ありがとう。

4

1 に答える 1

1

それらをコンマ区切りのリストにしたい場合は、それが集計関数の機能ですGROUP_CONCAT()。、、、などの代わりにname、列の正しい名前を置き換えてください...person_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
);

これにより、個人の名前とスポーツ名を含むスポーツごとに 1 つの行が生成され、スポーツごとに必要な回数だけ人物が複製されます。

于 2012-08-08T12:50:21.397 に答える