【发布时间】:2018-03-21 09:16:19
【问题描述】:
我对 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
如您所见,这些字段:
- disease_name_zh
- 疾病名称
- 说明
来自 LsDiseaseName,该表包含将记录转换为 LsDisease 表的表。
好的,它可以工作。我使用了 LEFT JOIN,因为我的想法是:“如果存在对 LsDiseaseName 表的翻译(对于 LsDisease 表的记录)这些字段将被评估,如果翻译不存在,则仅将信息返回到 LsDisease 表中,并且 LsDiseaseName 的前一个字段将被评估为 null强> 价值。
问题是改变这个 WHERE 子句:
LDN.language_id = 3
使用我没有翻译的语言的 id
我得到一个空的结果集。那么,我的推理有什么问题?我错过了什么?
【问题讨论】:
-
为了获得真正的左连接行为,您应该将
LDN.language_id = 3移动到连接的on子句中。
标签: mysql sql database join left-join