[英]What is wrong in this LEFT JOIN use?
我對使用LEFT JOIN有一點疑問。
我有這個查詢:
SELECT
LD.id AS disease_id,
LD.disease_name_en AS disease_name_en,
LDN.disease_name AS disease_name,
LDN.description AS description,
LD.image_link AS image_link
FROM LsDiseases AS LD
LEFT JOIN LsDiseaseName AS LDN
ON LDN.disease_id = LD.id
WHERE
LD.id = 1
AND
LDN.language_id = 1
返回這樣的輸出:
disease_id disease_name_en disease_name description image_link
----------------------------------------------------------------------------------------------------------------------------------------
1 Newcastle disease Newcastle disease TEST https://firebasestorage.googleapis.com/XXX
如您所見,這些字段是:
來自LsDiseaseName , LsDiseaseName是一個包含將記錄轉換為LsDisease表的表。
好吧,行得通。 我用一個LEFT JOIN,因為我的想法是:“如果存在翻譯成LsDiseaseName表(用於LsDisease表的記錄),這些領域將進行增值,如果翻譯不存在,只返回信息到LsDisease表和LsDiseaseName的前一個字段將使用空值進行賦值。
問題在於changint這個WHERE子句:
LDN.language_id = 3
使用我沒有翻譯語言的ID
我得到一個空的結果集。 那么,我的推理出了什么問題? 我想念什么?
在WHERE子句中放置LDN.Language_id = 3會將左聯接的含義更改為內部聯接(因為它不允許使用空值)
將該子句移至join語句
LEFT JOIN LsDiseaseName AS LDN
ON LDN.disease_id = LD.id
AND LDN.Language_id = 3
將此行移到左連接中
LEFT JOIN LsDiseaseName AS LDN
ON LDN.disease_id = LD.id
AND LDN.language_id = 3
實際上,首先要應用聯接,然后過濾id = 3
的最終結果集,這就是獲取空結果集的原因。
您應該在加入自身時進行語言過濾。
SELECT
LD.id AS disease_id,
LD.disease_name_en AS disease_name_en,
LDN.disease_name AS disease_name,
LDN.description AS description,
LD.image_link AS image_link
FROM LsDiseases AS LD
LEFT JOIN LsDiseaseName AS LDN
ON LDN.disease_id = LD.id AND LDN.Language_id = 3
WHERE
LD.id = 1
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.