全体にのゲームを放棄しないと、これは役に立ちますか?
DROP TABLE IF EXISTS student;
CREATE TABLE student
(id INT NOT NULL aUTO_INCREMENT PRIMARY KEY
,name VARCHAR(12) NOT NULL
);
INSERT INTO student VALUES
(1,'Peter'),
(2,'David'),
(3,'Mark'),
(4,'Peter'),
(5,'Brian');
DROP TABLE IF EXISTS student_skill;
CREATE TABLE student_skill
(id_student INT NOT NULL
,skill VARCHAR(20) NOT NULL
,value INT NOT NULL
,PRIMARY KEY(id_student,skill)
);
INSERT INTO student_skill VALUES
(1,'height',180),
(1,'weight',75),
(2,'height',170),
(3,'height',180),
(4,'height',170),
(4,'weight',75),
(5,'height',180),
(5,'weight',75);
クエリ1.
SELECT x.*
, y.height
, y.weight
FROM student x
JOIN
(SELECT id_student
, MAX(CASE WHEN skill = 'height' THEN value END) height
, MAX(CASE WHEN skill = 'weight' THEN value END) weight
FROM student_skill
GROUP
BY id_student
) y
ON y.id_student = x.id;
+----+-------+--------+--------+
| id | name | height | weight |
+----+-------+--------+--------+
| 1 | Peter | 180 | 75 |
| 2 | David | 170 | NULL |
| 3 | Mark | 180 | NULL |
| 4 | Peter | 170 | 75 |
| 5 | Brian | 180 | 75 |
+----+-------+--------+--------+
...または代わりに、クエリ2
SELECT s.*
, h.value height
, w.value weight
FROM student s
LEFT
JOIN student_skill h
ON h.id_student = s.id
AND h.skill = 'height'
LEFT
JOIN student_skill w
ON w.id_student = s.id
AND w.skill = 'weight';
+----+-------+--------+--------+
| id | name | height | weight |
+----+-------+--------+--------+
| 1 | Peter | 180 | 75 |
| 2 | David | 170 | NULL |
| 3 | Mark | 180 | NULL |
| 4 | Peter | 170 | 75 |
| 5 | Brian | 180 | 75 |
+----+-------+--------+--------+
あなたは私たちがあなたのために宿題をするために期待していますか?それはあなたに何が良いでしょうか? – Alp
私の体重を技術と考えるのはいいことです。私はかなり熟練しています。 – Strawberry
私はこれをたくさん試しましたが、私はそれをすることができませんでした。私は自分自身がこの質問に対する答えを得ていることを知ることができます(「身長が180、体重が75、名前が「Peter」」のすべての生徒)。ありがとう! – Peter