2017-09-13 13 views
0

2つのテーブル - 患者と発行者があります。 私は患者と発行者のテーブルからissuer_nameと共に患者テーブル全体を抽出します。オプションで、患者識別子の発行者はいない可能性があります。MySQLのwhere節とオプションのNULL

私が行う場合: 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

はヒント:左 –

+0

@MKhalidJunaidに参加し、我々は参加せずにそれを行うことができますか? – kingsmasher1

+0

はいselectステートメントの相関サブクエリですが、高価な解決策があるかもしれません –

答えて

1

クエリが

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

です:FROM句の

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

決して使用コンマ。 常には、適切で明示的なJOIN構文を使用します。コンマを使用するチュートリアルは避けてください。彼らに例を示すインストラクターに挑戦してください。

あなたはLEFT JOINをしたい:

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