簡體   English   中英

從SQL表中選擇並聯接(Select語句+ Hibernate代碼)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM