5

I've managed to create a view from some data in my MySQL database, as below:

mysql> CREATE VIEW phonelist AS
    -> SELECT parent.parentID AS ParentID,
    -> ParentPerson.firstName AS ParentFirstName,
    -> ParentPerson.lastName AS  ParentLastName,
    -> ChildPerson.firstName AS PlayerFirstName,
    -> ChildPerson.lastName AS  PlayerLastName,
    -> GuardianHomePhone.homeNumber AS GuardianHomePhone
    -> FROM parent
    -> JOIN player ON (parent.parentID IN (player.motherID, player.fatherID))
    -> JOIN person AS ParentPerson ON (ParentPerson.personID = parent.parentID)
    -> JOIN person AS  ChildPerson ON (ChildPerson.personID = player.playerID)
    -> JOIN addressDetails AS GuardianHomePhone ON (GuardianHomePhone.personID = parent.parentID);

Query OK, 0 rows affected (0.00 sec)

mysql> select * from phonelist;

+----------+-----------------+----------------+-----------------+----------------+-------------------+
| ParentID | ParentFirstName | ParentLastName | PlayerFirstName | PlayerLastName | GuardianHomePhone |
+----------+-----------------+----------------+-----------------+----------------+-------------------+
|        8 | Gregory         | Peck           | Michael         | Peck           | 034871234         |
|        9 | Laura           | Peck           | Michael         | Peck           | 034871234         |
|       10 | Martha          | Petersen       | Matt            | Petersen       | 034724321         |
|       10 | Martha          | Petersen       | Christopher     | Petersen       | 034724321         |
|       11 | Chris           | Michaels       | Richard         | Michaels       | 034791212         |
|       11 | Chris           | Michaels       | Shaun           | Michaels       | 034791212         |
|       12 | Nadine          | Michaels       | Richard         | Michaels       | 034791212         |
|       12 | Nadine          | Michaels       | Shaun           | Michaels       | 034791212         |
|       13 | Barry           | Dackers        | Harry           | Dackers        | 034871996         |
|       14 | Kevin           | Mitchell       | Daniel          | Mitchell       | 034742886         |
|       15 | Rebecca         | Mitchell       | Daniel          | Mitchell       | 034742886         |
+----------+-----------------+----------------+-----------------+----------------+-------------------+
11 rows in set (0.00 sec)

mysql>

Creating this view was a challenge, but the description below is what I am having trouble navigating around:

また、各プレイヤーが所属するチームをこのビューに追加する必要があります。チームの名前を一致させるには 4 つのテーブルを結合する必要があるため、それらを結合するのに苦労しています。以下のチームにプレーヤーを一致させる別のクエリを作成することができました。

mysql> select person.firstName, person.lastName, team.teamName
    -> from person join player on person.personID = player.playerID
    -> join teamAllocation on person.personID = teamAllocation.playerID
    -> join team on teamAllocation.teamID = team.teamID;

+-------------+----------+------------+
| firstName   | lastName | teamName   |
+-------------+----------+------------+
| Michael     | Peck     | U10 Red    |
| Christopher | Petersen | U10 Red    |
| Richard     | Michaels | U11 Orange |
| Shaun       | Michaels | U9 Yellow  |
| Matt        | Petersen | U11 Orange |
| Harry       | Dackers  | U9 Yellow  |
| Daniel      | Mitchell | U9 Yellow  |
+-------------+----------+------------+
7 rows in set (0.00 sec)

mysql>

私が頭の中で視覚化している結果は、次のようなものです。

+----------+-----------------+----------------+-----------------+----------------+----------------+-------------------+
| ParentID | ParentFirstName | ParentLastName | PlayerFirstName | TeamName       | PlayerLastName | GuardianHomePhone |
+----------+-----------------+----------------+-----------------+----------------+----------------+-------------------+
|        8 | Gregory         | Peck           | Michael         | U10 Red        | Peck           | 034871234         |
|        9 | Laura           | Peck           | Michael         | U10 Red        | Peck           | 034871234         |
|       10 | Martha          | Petersen       | Matt            | U11 Orange     | Petersen       | 034724321         |
|       10 | Martha          | Petersen       | Christopher     | U10 Red        | Petersen       | 034724321         |
|       11 | Chris           | Michaels       | Richard         | U11 Orange     | Michaels       | 034791212         |
|       11 | Chris           | Michaels       | Shaun           | U9 Yellow      | Michaels       | 034791212         |
|       12 | Nadine          | Michaels       | Richard         | U11 Orange     | Michaels       | 034791212         |
|       12 | Nadine          | Michaels       | Shaun           | U9 Yellow      | Michaels       | 034791212         |
|       13 | Barry           | Dackers        | Harry           | U9 Yellow      | Dackers        | 034871996         |
|       14 | Kevin           | Mitchell       | Daniel          | U9 Yellow      | Mitchell       | 034742886         |
|       15 | Rebecca         | Mitchell       | Daniel          | U9 Yellow      | Mitchell       | 034742886         |
+----------+-----------------+----------------+-----------------+----------------+----------------+-------------------+

誰かがこれについて私を助けることができれば、私はとても感謝しています. データを使用してクエリをテストしたい方のために、http://pastebin.com/S4iJyJUhにスキーマ (DDL) スクリプトとデータ (DML) スクリプトを (1 つの「貼り付け」に) 入れました。

また、ビューを行うためのより良い方法があると誰かが考えている場合は、お知らせください。

4

1 に答える 1

1

2 つのクエリを組み合わせる必要があるだけです。

CREATE VIEW phonelistWithTeams AS
SELECT parent.parentID AS ParentID,
  ParentPerson.firstName AS ParentFirstName,
  ParentPerson.lastName AS  ParentLastName,
  ChildPerson.firstName AS PlayerFirstName,
  ChildPerson.lastName AS  PlayerLastName,
  team.teamName AS TeamName,
  GuardianHomePhone.homeNumber AS GuardianHomePhone
FROM parent
  JOIN player ON (parent.parentID IN (player.motherID, player.fatherID))
  JOIN person AS ParentPerson ON (ParentPerson.personID = parent.parentID)
  JOIN person AS  ChildPerson ON (ChildPerson.personID = player.playerID)
  JOIN addressDetails AS GuardianHomePhone ON (GuardianHomePhone.personID = parent.parentID)
  JOIN teamAllocation ON (ChildPerson.personID = teamAllocation.playerID)
  JOIN team ON (teamAllocation.teamID = team.teamID);

ランニングSELECT * FROM phonelistWithTeamsはあなたに与えます

+----------+-----------------+----------------+-----------------+----------------+------------+-------------------+
| ParentID | ParentFirstName | ParentLastName | PlayerFirstName | PlayerLastName | TeamName   | GuardianHomePhone |
+----------+-----------------+----------------+-----------------+----------------+------------+-------------------+
|        8 | Gregory         | Peck           | Michael         | Peck           | U10 Red    | 034871234         |
|        9 | Laura           | Peck           | Michael         | Peck           | U10 Red    | 034871234         |
|       10 | Martha          | Petersen       | Matt            | Petersen       | U11 Orange | 034724321         |
|       10 | Martha          | Petersen       | Christopher     | Petersen       | U10 Red    | 034724321         |
|       11 | Chris           | Michaels       | Richard         | Michaels       | U11 Orange | 034791212         |
|       11 | Chris           | Michaels       | Shaun           | Michaels       | U9 Yellow  | 034791212         |
|       12 | Nadine          | Michaels       | Richard         | Michaels       | U11 Orange | 034791212         |
|       12 | Nadine          | Michaels       | Shaun           | Michaels       | U9 Yellow  | 034791212         |
|       13 | Barry           | Dackers        | Harry           | Dackers        | U9 Yellow  | 034871996         |
|       14 | Kevin           | Mitchell       | Daniel          | Mitchell       | U9 Yellow  | 034742886         |
|       15 | Rebecca         | Mitchell       | Daniel          | Mitchell       | U9 Yellow  | 034742886         |
+----------+-----------------+----------------+-----------------+----------------+------------+-------------------+
于 2012-05-09T00:21:23.057 に答える