2017-09-13 125 views
0

我有2個表格 - 患者和發行者。 我用以從患者和發行者表中提取整個患者表以及issuer_name。可選地,可能不存在患者標識符的發放者。MySQL與可選NULL匹配where子句

如果我這樣做: select * from patients, issuer_name where patients.issuer_of_patient_identifier=issuer.issuer_id不會返回任何情況下的相應患者表格行issuer_of_patient_identifier爲NULL。

我該如何做到這一點?

mysql> describe patients; 
+------------------------------+--------------+------+-----+-------------------+-----------------------------+ 
| Field      | Type   | Null | Key | Default   | Extra      | 
+------------------------------+--------------+------+-----+-------------------+-----------------------------+ 
| patient_id     | int(11)  | NO | PRI | NULL    | auto_increment    | 
| patient_identifier   | varchar(64) | YES | MUL | NULL    |        | 
| issuer_of_patient_identifier | int(11)  | YES | MUL | NULL    |        | 
| medical_record_locator  | varchar(64) | YES |  | NULL    |        | 
| patient_name     | varchar(128) | NO | MUL | NULL    |        | 
| birth_date     | datetime  | YES |  | NULL    |        | 
| deceased_date    | datetime  | YES |  | NULL    |        | 
| gender      | varchar(16) | YES |  | NULL    |        | 
| ethnicity     | varchar(45) | YES |  | NULL    |        | 
| date_created     | datetime  | NO |  | CURRENT_TIMESTAMP |        | 
| last_update_date    | datetime  | YES |  | NULL    | on update CURRENT_TIMESTAMP | 
| last_updated_by    | varchar(128) | NO |  | NULL    |        | 
+------------------------------+--------------+------+-----+-------------------+-----------------------------+ 
12 rows in set (0.00 sec) 

mysql> describe issuers; 
+------------------+--------------+------+-----+-------------------+-----------------------------+ 
| Field   | Type   | Null | Key | Default   | Extra      | 
+------------------+--------------+------+-----+-------------------+-----------------------------+ 
| issuer_id  | int(11)  | NO | PRI | NULL    | auto_increment    | 
| issuer_name  | varchar(64) | NO | MUL | NULL    |        | 
| issuer_uid  | varchar(128) | YES |  | NULL    |        | 
| issuer_uid_type | varchar(64) | YES |  | NULL    |        | 
| date_created  | datetime  | NO |  | CURRENT_TIMESTAMP |        | 
| last_update_date | datetime  | YES |  | NULL    | on update CURRENT_TIMESTAMP | 
| last_updated_by | varchar(128) | NO |  | NULL    |        | 
+------------------+--------------+------+-----+-------------------+-----------------------------+ 
+2

提示:LEFT JOIN –

+0

@MKhalidJunaid我們可以不用參加? – kingsmasher1

+0

是select語句中的相關子查詢,但它可能是昂貴的解決方案 –

回答

1

查詢是

select * from patients 
LEFT JOIN issuer_name ON 
patients.issuer_of_patient_identifier = issuer.issuer_id 

沒有加入:

select * from patients, issuer_name 
where patients.issuer_of_patient_identifier = issuer.issuer_id 
OR patients.issuer_of_patient_identifier IS NULL 
+0

謝謝,這有幫助。 – kingsmasher1

1

決不FROM子句中使用逗號。 始終使用使用正確的,明確的JOIN語法。避免使用逗號的教程。挑戰指導員,展示他們的例子。

你想要一個LEFT JOIN

select * 
from patients p left join 
    issuer_name i 
    on p.issuer_of_patient_identifier = i.issuer_id;