2017-11-16 11 views
0

私は次の2つの表があります。選択し、SQLテーブルから参加を(Selectステートメント+コードを休止状態)

"STUDENT" と "SKILL" テーブル

STUDENT table 
"id"   "name" 
1    Peter 
2    David 
3    Mark 

SKILL table 
"id" "id_student" "skill"  "skill value" 
1   1   height    180 
2   1   weight    75 
3   2   height    170 
4   3   height    180 

を私は「すべての生徒を選択したいと思います身長は180、体重は75、名前は「Peter」です。

私が必要とする主なものは、SQL文です誰かがどのように多くのJava +休止状態(私はCriteriaオブジェクトを作成する方法を意味)

を使用してこれを行うには私に言うことができれば、それは同様に非常に役立つだろうご協力いただきありがとうございます。

+1

あなたは私たちがあなたのために宿題をするために期待していますか?それはあなたに何が良いでしょうか? – Alp

+0

私の体重を技術と考えるのはいいことです。私はかなり熟練しています。 – Strawberry

+0

私はこれをたくさん試しましたが、私はそれをすることができませんでした。私は自分自身がこの質問に対する答えを得ていることを知ることができます(「身長が180、体重が75、名前が「Peter」」のすべての生徒)。ありがとう! – Peter

答えて

0

全体にのゲームを放棄しないと、これは役に立ちますか?

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 | 
+----+-------+--------+--------+ 
+0

ありがとうストロベリー。要件を満たす人だけを返すことは可能でしょうか? – Peter

+0

もちろん、その作業は読者のための練習として意図的に残されています。 – Strawberry

+0

オッケー、私はそれを理解する:)良い考え。私は明日の朝にそれを試してみます(私は今これを試すことはできません:()あなたの助けをたくさんありがとうストロベリー – Peter