[英]Select and Join from SQL table (Select statement + Hibernate code)
我有以下兩個表:
“學生”和“技能”表
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體重和“彼得”作為名字的學生”。
我需要的主要是SQL語句,但是如果有人可以告訴我如何使用Java + Hibernate做到這一點(我的意思是如何創建Criteria對象),這也將非常有幫助。
非常感謝您的幫助。
如果不放棄整個游戲,這有幫助嗎?
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 |
+----+-------+--------+--------+
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.