簡體   English   中英

LEFT JOIN用法有什么問題?

[英]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

如您所見,這些字段是:

  • disease_name_en
  • disease_name
  • 描述

來自LsDiseaseNameLsDiseaseName是一個包含將記錄轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM