如果右表没有行,则查询不返回任何具有类似'%'运算符和左外连接的行

Kri*_*hna 5 sql sql-server

我正在使用MS SQL SERVER 2008R2.我有两张桌子A和B.

create table A(
id int primary key, name Varchar(20));

create table B(
id int primary key, user_name Varchar(20));

insert into A values(1,'A1');
insert into A values(2,'A2');
insert into A values(3,'A3');
insert into A values(4,'A4');
insert into A values(5,'A5');
Run Code Online (Sandbox Code Playgroud)

现在我的问题是:

select A.* 
from A left outer join B on A.id = B.id 
where B.user_name like '%';
Run Code Online (Sandbox Code Playgroud)

要么

select A.* 
from A left outer join B on A.id = B.id 
where B.user_name like '%%';
Run Code Online (Sandbox Code Playgroud)

上面写入的查询不会返回任何记录,即使左表中有5个条目.在右表没有任何过滤器它工作正常.

小智 3

在您的场景中...发生第一个左连接,它找到 5 个条目,然后在该记录集上 sql 服务器正在应用 user_name 过滤器,并且所有行的 user_name 为 null..没有显示记录。

您可以将查询更改为

select A.* from A left outer join B on A.id = B.id where ISNULL(B.user_name,'') like '%%';
Run Code Online (Sandbox Code Playgroud)