2016-11-14 41 views
2

我在我的數據庫中有三張桌子,一張是病人,一張是他們的溫度,另一張桌上是病人的身份證和溫度的ID作爲主鍵。如何通過mysql檢索所有患者的溫度信息?

病人表;

+----+------+--------+------------+ 
| id | name | gender | birth  | 
+----+------+--------+------------+ 
| 1 | Hind | F  | 2015-01-01 | 
| 2 | Saad | M  | 2016-01-01 | 
+----+------+--------+------------+ 

patient_info表:

+------+------+ 
| id_t | id_p | 
+------+------+ 
| 1 | 1 | 
| 1 | 2 | 
| 2 | 3 | 
| 2 | 4 | 
+------+------+ 

下表:

+----+-------------+ 
| id | temperature | 
+----+-------------+ 
| 1 |  37.9 | 
| 2 |   37 | 
| 3 |   38 | 
| 4 |  38.4 | 
+----+-------------+ 

所以,我想要的是檢索所有患者的溫度,這裏是我做了什麼:

mysql> SELECT p.*, t.* FROM patient p INNER JOIN patient_info pi ON pi.id_p = p.id INNER JOIN temperature t ON t.id = pi.id_t; 
+----+------+--------+------------+----+-------------+ 
| id | name | gender | birth  | id | temperature | 
+----+------+--------+------------+----+-------------+ 
| 1 | Hind | F  | 2015-01-01 | 1 |  37.9 | 
| 2 | Saad | M  | 2016-01-01 | 1 |  37.9 | 
+----+------+--------+------------+----+-------------+ 

但tha t不是我想要的,我需要知道所有Hind和Saad的溫度 謝謝全部

+2

我認爲你的ID是在你的Patient_Info表上,或者你的示例數據是壞的。您向我們展示了兩位ID爲「1」和「2」的患者,但您的Patients_Info表(字段id_p)中有4位患者。您無法在患者3和4上顯示臨時信息,因爲患者表中不存在這些信息。 – JNevill

+0

是的。這裏只有兩個病人,每個病人都有一個溫度讀數(兩個讀數都相同) - 雖然爲什麼溫度有它自己的表格超出了我! – Strawberry

+0

@JNevill你是對的,我的錯誤,謝謝:) –

回答

1

我希望你真的能夠像這樣 - 儘管將溫度存儲在單獨的表格中並沒有什麼意義。 ..

DROP TABLE IF EXISTS patient; 

CREATE TABLE patient 
(patient_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,name VARCHAR(12) NOT NULL 
,gender CHAR(1) NOT NULL 
,dob DATE NOT NULL 
); 

INSERT INTO patient VALUES 
(101 ,'Hind','F','2015-01-01'), 
(102 ,'Saad','M','2016-01-01'); 


DROP TABLE IF EXISTS patient_temperature; 

CREATE TABLE patient_temperature 
(patient_id INT NOT NULL 
,temperature_id INT NOT NULL 
,PRIMARY KEY(patient_id,temperature_id) 
); 

INSERT INTO patient_temperature VALUES 
(101,1), 
(101,2), 
(102,3), 
(102,4); 

DROP TABLE IF EXISTS temperature; 

CREATE TABLE temperature 
(temperature_id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,temperature DECIMAL(5,2) NOT NULL 
); 

INSERT INTO temperature VALUES 
(1,37.9), 
(2,37), 
(3,38), 
(4,38.4); 

SELECT p.* 
    , t.* 
    FROM patient p 
    JOIN patient_temperature pt 
    ON pt.patient_id = p.patient_id 
    JOIN temperature t 
    ON t.temperature_id = pt.temperature_id; 
+------------+------+--------+------------+----------------+-------------+ 
| patient_id | name | gender | dob  | temperature_id | temperature | 
+------------+------+--------+------------+----------------+-------------+ 
|  101 | Hind | F  | 2015-01-01 |    1 |  37.90 | 
|  101 | Hind | F  | 2015-01-01 |    2 |  37.00 | 
|  102 | Saad | M  | 2016-01-01 |    3 |  38.00 | 
|  102 | Saad | M  | 2016-01-01 |    4 |  38.40 | 
+------------+------+--------+------------+----------------+-------------+ 
+0

「把溫度存儲在一個單獨的表格中並沒有什麼意義」 - 實際上,在醫療系統中有數據字典有效值的例如挑選清單是一種常見的UX範例。當你考慮這個問題時,一個人有效溫度的基數很小。從實際的角度來看,大多數SQL產品/編碼器在約束條件方面表現不佳,但外鍵是例外......這說明,您已經省略了架構的FKs :) – onedaywhen

+0

...也許沒有意義的是記錄一個溫度,而不參考日期/時間或事件。 – onedaywhen

相關問題