1

重複の可能性:
2つの列を1つの列に結合するSQLクエリ

そのため、MySQLでクエリを正しく取得するのに問題があります。

これが私が今使っているテーブルです

DROP TABLE IF EXISTS `qualifications`;
CREATE TABLE `qualifications`(
    `activity` int NOT NULL,
    `group` int NOT NULL,
`tournament` int NOT NULL,
`judge_1` int NOT NULL,
`grade_1` int NOT NULL,
`judge_2` int NOT NULL,
`grade_2` int NOT NULL,
`judge_3` int NOT NULL,
`grade_3` int NOT NULL,
PRIMARY KEY(`activity`,`group`),
FOREIGN KEY(`activity`) REFERENCES `activities`(`id`),
FOREIGN KEY(`group`) REFERENCES `groups`(`id`),
FOREIGN KEY(`judge_1`) REFERENCES `judges`(`id`),
FOREIGN KEY(`judge_2`) REFERENCES `judges`(`id`),
FOREIGN KEY(`judge_3`) REFERENCES `judges`(`id`),
FOREIGN KEY(`tournament`) REFERENCES `tournaments`(`id`)
)ENGINE=InnoDB, DEFAULT CHARSET=utf8;

私が欲しいのは、アクティビティ名、グループ名、トーナメント名、および3人の審査員全員の名前と成績を取得することです。これが私がこれまでに持っているクエリです:

select a.name as Game, t.name as Tornament, g.name as "Group", j.name as Judge1, j.name as Judge2, (q.grade_1+q.grade_2+q.grade_3) as Grades from activities a, groups g, judges j, tournaments t, qualifications c where
a.id = q.activity and t.id = q.tournament and g.id = q.group and g.id = 2;

もちろん、これは審査員名を除いて正常に機能します... 1つの結果で3人の審査員名を取得するにはどうすればよいですか?

よろしくお願いします。うまく説明できなかったらごめんなさい。

4

2 に答える 2

0

@Yogendra Singhの回答に代わるものとして、名前が区切り文字列に連結されることを許容できる場合( U+001eのような区切り文字として使用できます)、judges結果をグループ化することにより、テーブルの単一パスのみを作成できます列GROUP_CONCAT()の集計:judges.name

SELECT   a.name                              AS Game,
         t.name                              AS Tournament,
         g.name                              AS Group,
         GROUP_CONCAT(j.name SEPARATOR 0x1e) AS Judges,
         q.grade_1 + q.grade_2 + q.grade_3   AS Grades 
FROM     activities     a
    JOIN judges         j ON j.id IN (a.judge_1, a.judge_2, a.judge_3)
    JOIN qualifications q ON a.id = q.activity 
    JOIN tournaments    t ON t.id = q.tournament 
    JOIN groups         g ON g.id = q.group 
WHERE    g.id = 2
GROUP BY a.id, t.id
于 2012-11-09T06:48:47.317 に答える
0

テーブルと結合しJudgesて、名前が存在すると仮定して名前を取得します。

    select a.name as Game, t.name as Tornament, g.name as "Group",
          j1.name as Judge1, 
          j2.name as Judge2,
          j3.name as Judge3,
          (q.grade_1+q.grade_2+q.grade_3) as Grades 
    from activities a JOIN judges j1
         ON a.judge_1 = j1.id
         JOIN judges j2
         ON a.judge_2 = j2.id
         JOIN judges j3
         ON a.judge_3 = j3.id
         JOIN qualifications q 
         ON a.id = q.activity 
         JOIN tournaments t
         ON t.id = q.tournament 
         JOIN groups g
         ON g.id = q.group 
     WHERE g.id = 2;
于 2012-11-09T06:41:52.700 に答える