【发布时间】:2020-02-06 11:24:06
【问题描述】:
尝试使用 where 子句而不是左连接来获得相同的结果
TableA 架构:
id
name
created_by
TableB 架构:
id
name
updated_by
样本表A
id name created_by
1 pen a
2 paste k
样本表B
id name updated_by
1 inkpen b
1 ballpen c
left 加入查询
select tablea.id, tableb.id, tablea.name, tableb.name
from tablea
left join tableb on tableb.id = tablea.id and tableb.updated_by = 'a'
结果
tablea.id tableb.id tablea.name tableb.name
1 NULL pen NULL
使用 where 子句查询:
select tablea.id, tableb.id, tablea.name, tableb.name
from tablea left join tableb
ON tableb.id = tablea.id WHERE tableb.updated_by = 'a'
结果
tablea.id tableb.id tablea.name tableb.name
NULL NULL NULL NULL
我们在传递 user_id 之前使用了一个函数。
反过来,该函数返回一个表并在左连接中使用 user_id。
由于该函数没有使用索引,我们决定使用视图来代替。
但是,在视图中,我们不能传递变量。因此我们无法在 Left join 中使用 tableb.updated_by,因此在 where 子句中尝试了相同的查询。
我们如何编写查询,以便通过 where 子句获得与左连接相同的结果?
【问题讨论】:
-
WHERE 子句版本的语法无效。您使用的是哪个 dbms?
标签: mysql sql postgresql-9.4