我正在使用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)
| 归档时间: |
|
| 查看次数: |
307 次 |
| 最近记录: |