我有两个表格配置文件和名称,配置文件表包含一些与用户相关的元数据.名称表包含配置文件可能具有的所有可能名称.
我正在尝试创建一个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
Run Code Online (Sandbox Code Playgroud)
这是我想要的结果
+------------+-------------+--------+
| 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?
一旦您WHERE在正在LEFT JOIN编辑的表上有一个子句,您将立即消除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
Run Code Online (Sandbox Code Playgroud)
您要过滤type为0或1(在where子句中),这将省略nulls.
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7701 次 |
| 最近记录: |