一个关于sql语句非常白痴的问题

ttoc 2006-05-10 10:35:10
我有两个表

create table t1(
f1 integer,
f2 integer,
f3 integer);

create table t2(
f1 integer,
f2 integer,
f3 integer);

insert into t1 values (1,1,1);
insert into t1 values (2,2,2);
insert into t1 values (3,3,3);

insert into t2 values (1,6,6);

现在做一个查询
select t1.f2,t2.f2 from t1 left join t2 on t1.f1=t2.f1
得到
+------+------+
| f2 | f2 |
+------+------+
| 1 | 6 |
| 2 | NULL |
| 3 | NULL |
+------+------+

但是加上一个where条件,变成
select t1.f2,t2.f2 from t1 left join t2 on t1.f1=t2.f1 where t2.f2=6;
就得到
+------+------+
| f2 | f2 |
+------+------+
| 1 | 6 |
+------+------+

不是左连接吗?怎么t1中的数据不全显示呢?可能问题比较蠢,希望哪位大哥能给解释一下.
还有就是我怎么能既给t2加上where条件,又有t1中的全部值,谢谢了
...全文
119 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
itblog 2006-05-10
  • 打赏
  • 举报
回复
楼上快~
paoluo 2006-05-10
  • 打赏
  • 举报
回复

--建立測試環境
create table t1(
f1 int,
f2 int,
f3 int);

create table t2(
f1 int,
f2 int,
f3 int);

insert into t1 values (1,1,1);
insert into t1 values (2,2,2);
insert into t1 values (3,3,3);

insert into t2 values (1,6,6);
--測試
select t1.f2,t2.f2 from t1 left join t2 on t1.f1=t2.f1 And t2.f2=6
--刪除測試環境
Drop Table t1,t2
--結果
/*
f2 f2
1 6
2 NULL
3 NULL
*/
子陌红尘 2006-05-10
  • 打赏
  • 举报
回复
查询计划先执行left join,然后再对left join返回的结果集使用where条件进行筛选,不符合 where 条件的记录会从结果集中被剔除。
paoluo 2006-05-10
  • 打赏
  • 举报
回复
try

select t1.f2,t2.f2 from t1 left join t2 on t1.f1=t2.f1 And t2.f2=6

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧