[英]MySQL double LEFT OUTER JOIN
我有兩個表格配置文件和名稱 ,配置文件表包含一些與用戶相關的元數據。 名稱表包含配置文件可能具有的所有可能名稱。
我正在嘗試創建一個MYSQL查詢,它將為我提供profile.age,所有配置文件的給定名稱和系列名稱,即使它沒有給定的名稱或系列名稱
+-------+---------+ | ID | AGE | +-------+---------+ | 0 | 10 | | 1 | 20 | | 2 | 30 | | 3 | 40 | +-------+---------+
+------------+--------+--------+ | PROFILE_ID | TYPE | NAME | +------------+--------+--------+ | 0 | 0 | Jo | | 0 | 1 | Blog | | 1 | 0 | Jim | | 2 | 1 | Smith | +------------+--------+--------+ Type 0 = Given Name Type 1 = Family Name
這是我目前使用的查詢。
SELECT given.name AS 'given_name', family.name AS 'family_name', profile.age
FROM profile
LEFT OUTER JOIN name given ON profile.id = given.profile_id
LEFT OUTER JOIN name family ON profile.id = family.profile_id
WHERE given.type = 0
AND profile_id.type = 1
LIMIT 0 , 30
這是我想要的結果
+------------+-------------+--------+ | GIVEN_NAME | FAMILY_NAME | ADE | +------------+-------------+--------+ | Jo | Blog | 10 | | Jim | NULL | 20 | | NULL | Smith | 30 | | NULL | NULL | 40 | +------------+-------------+--------+
然而,這是我實際得到的
+------------+-------------+--------+ | GIVEN_NAME | FAMILY_NAME | AGE | +------------+-------------+--------+ | Jo | Blog | 10 | +------------+-------------+--------+
根據我的理解, LEFT OUTER JOIN應返回NULL值連接。 我究竟做錯了什么? 如何更改我的查詢以返回NULL值joun?
您將過濾type
設置為0或1(在where子句中),這將忽略null
s。
SELECT given.name AS 'given_name', family.name AS 'family_name', profile.age
FROM profile
LEFT OUTER JOIN name given
ON profile.id = given.profile_id and given.type = 0
LEFT OUTER JOIN name family
ON profile.id = family.profile_id and profile.type = 1
LIMIT 0 , 30
只要在正在進行LEFT JOIN
的表上有WHERE
子句,就會立即消除NULL
行(即沒有匹配的位置)。 因此對於初學者,您應該將given.type = 0
的條件移動到ON
子句而不是WHERE
子句中。 而且我將假設您在WHERE
子句中的其他條件存在問題。
SELECT given.name AS 'given_name', family.name AS 'family_name', profile.age
FROM profile
LEFT OUTER JOIN name given ON profile.id = given.profile_id AND given.type = 0
LEFT OUTER JOIN name family ON profile.id = family.profile_id AND family.type = 1
LIMIT 0 , 30
SELECT N1.id, N1.name,N2.name, A3.age
FROM name N1, name N2, age A3
WHERE N1.id=N2.id AND N1.id=A3.id
AND N1.type=0 AND N2.type=1
name
是指name表age
是指profile表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.