我有两个具有这样结构的表。首先是用户表:
id | email | password
1 'email' 'pass'
2 'new2' 'pass'
和报告表:
user_id | field | text
1 4 Tom
即使用户在email
表中没有匹配项,如何返回password
和report
值?这是我到目前为止所做的。
select a.email, a.password, b.text from users a
left join data b
on a.id = b.user_id
and b.field = 4
and a.id = 2;
所需输出以获取ID为2的用户的信息:
email | password | text
'new2' 'pass'
到目前为止,我目前还没有得到任何回报
答案 0 :(得分:0)
试试这个:
SELECT
u.email
, u.password
, r.text
FROM
users AS u
LEFT JOIN report AS r
ON r.user_id = u.id
WHERE
u.id = 2
答案 1 :(得分:0)
left join
中 first 表中的条件进入where
子句。 second 表中的条件包含在on
子句中:
select u.email, u.password, d.text
from users u left join
data d
on u.id = d.user_id and d.field = 4
where a.id = 2;
该规则起初可能看似随意。但事实并非如此。 left join
返回第一个表中的所有行,无论是否on
子句的计算结果为true。因此,第一个表上的过滤条件不会过滤掉任何行。 where
子句执行此过滤。
答案 2 :(得分:0)
我不确定您是否正确地将查询粘贴到您的问题中,但如果我了解您所追求的内容,那么这应该有效:
SELECT a.email, a.password, b.text
FROM users a
LEFT JOIN report b ON a.id = b.user_id
WHERE a.id = 2
目前尚不清楚为什么要检查b.field
,但如果您需要这样做,请继续将其添加到LEFT JOIN
。通常,当您仍希望返回行时,将条件放在LEFT JOIN ... ON
中,如果条件不满足则不应返回行时将条件放在WHERE
子句中。