select * from table1,table2... 这样形式的怎么实现 left join呢

symbol_bc 2010-07-16 10:58:21
似乎select * from table1, table2,table3 where table1.id = table2.id and table1.id = table3.id和
select * from table1 inner join table2 on table1.id = table2.id
inner join table1.id = table3.id
是等价的。


我想问,怎样能在前者的情况下实现left join呢
...全文
4173 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
everglow 2010-07-16
  • 打赏
  • 举报
回复
升哥厉害,学习了
东那个升 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 symbol_bc 的回复:]
东升哥比较厉害啊!!!
我明白了,重点是那个 "*=", "*="标识left join ,"=*"标识right join对吧!!

可是执行报了个错!

SQL code

此查询使用的不是 ANSI 外部联接运算符("*=" 或 "=*")。若要不进行修改即运行此查询,请使用存储过程 sp_dbcmptlevel 将当前数据库的兼容级别设置为 80 或更低。极力建议使用 ANS……
[/Quote]


是的2000还可以用用。。。。如果数据库升级就麻烦了
feilniu 2010-07-16
  • 打赏
  • 举报
回复
INNER JOIN/LEFT JOIN/RIGHT JOIN/CROSS JOIN是SQL标准语法。以前那些过时的写法就没有必要再回头去找了。
symbol_bc 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 htl258 的回复:]
SQL2K可以用楼上的写法,SQL2K5以后已不支持那种写法,楼主三思。
[/Quote]
收到,结贴!!
wzszy 2010-07-16
  • 打赏
  • 举报
回复
东升哥强,学了一招了
symbol_bc 2010-07-16
  • 打赏
  • 举报
回复
东升哥比较厉害啊!!!
我明白了,重点是那个 "*=", "*="标识left join ,"=*"标识right join对吧!!

可是执行报了个错!

此查询使用的不是 ANSI 外部联接运算符("*=" 或 "=*")。若要不进行修改即运行此查询,请使用存储过程 sp_dbcmptlevel 将当前数据库的兼容级别设置为 80 或更低。极力建议使用 ANSI 外部联接运算符(LEFT OUTER JOIN、RIGHT OUTER JOIN)重写此查询。在将来的 SQL Server 版本中,即使在向后兼容模式下,也不支持非 ANSI 联接运算符。

这是不是说明这种写法已经过时了???
东那个升 2010-07-16
  • 打赏
  • 举报
回复
select * from 
table1 a,table2 b ,table3 c
where a.id *= b.id
and a.id *= c.id
htl258_Tony 2010-07-16
  • 打赏
  • 举报
回复
SQL2K可以用楼上的写法,SQL2K5以后已不支持那种写法,楼主三思。
东那个升 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 symbol_bc 的回复:]
我想大侠们没明白我的意思?

SQL code

select * from table1, table2,table3 where table1.id = table2.id and table1.id = table3.id
--上面的写法和下面的写法应该是一个意思,即说明上面的写法跟inner join是一样的
select * from table1 inner join t……
[/Quote]


declare @t1 table (id int, value int)
insert @t1 select 1,1 union all
select 2,2 union all
select 3,2

declare @t2 table (id int, value int)
insert @t2 select 1,1



select * from @t1 a ,@t2 b where a.id*=b.id



(3 行受影响)

(1 行受影响)
id value id value
----------- ----------- ----------- -----------
1 1 1 1
2 2 NULL NULL
3 2 NULL NULL

(3 行受影响)
symbol_bc 2010-07-16
  • 打赏
  • 举报
回复
我想大侠们没明白我的意思?

select * from table1, table2,table3 where table1.id = table2.id and table1.id = table3.id
--上面的写法和下面的写法应该是一个意思,即说明上面的写法跟inner join是一样的
select * from table1 inner join table2 on table1.id = table2.id
inner join table1.id = table3.id

而我想知道,就用上面的写法,不用这些join的关键字,怎样写出left join来???????
htl258_Tony 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 symbol_bc 的回复:]
引用 4 楼 htl258 的回复:
SQL code

SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
LEFT JOIN table3
ON table1.id = table3.id



如果没有left join,就用第一种那样的形式可以吗?

SQL code

select……
[/Quote]
如果不用左外连,用内联的方式可以像你这样,跟INNER JOIN等效。
东那个升 2010-07-16
  • 打赏
  • 举报
回复
declare @t1 table (id int, value int)
insert @t1 select 1,1 union all
select 2,2 union all
select 3,2

declare @t2 table (id int, value int)
insert @t2 select 1,1



select * from @t1 a left join @t2 b on a.id=b.id


(3 行受影响)

(1 行受影响)
id value id value
----------- ----------- ----------- -----------
1 1 1 1
2 2 NULL NULL
3 2 NULL NULL

(3 行受影响)
symbol_bc 2010-07-16
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 htl258 的回复:]
SQL code

SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
LEFT JOIN table3
ON table1.id = table3.id

[/Quote]

如果没有left join,就用第一种那样的形式可以吗?

select * from table1,table2,table3 where .. .. . . .. --这样行吗,实现left join
htl258_Tony 2010-07-16
  • 打赏
  • 举报
回复

SELECT *
FROM table1
LEFT JOIN table2
ON table1.id = table2.id
LEFT JOIN table3
ON table1.id = table3.id
symbol_bc 2010-07-16
  • 打赏
  • 举报
回复
还请楼上的用上面的例子写一个,我不大懂
东那个升 2010-07-16
  • 打赏
  • 举报
回复
Left Outer Join 运算符返回满足第一个(顶端)输入与第二个(底端)输入联接的每一行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。第二个输入中的非匹配行作为空值返回。如果 Argument 列内不存在任何联接谓词,则每行都是一个匹配行。
天-笑 2010-07-16
  • 打赏
  • 举报
回复
使用“+” 号
代码下载地址: https://pan.quark.cn/s/ee8627e4e6d7 ABAP调试器是一种功能强大的工具,可用于在执行期间对ABAP代码进行检验。除了常规的核心功能(例如逐行运行代码以及检验变量、字段符号和引用的值)之外,它还提供了一些辅助性的特性,能够简化并压缩调试会话的时长。并非所有使用者都熟悉这些辅助特性。SAP ABAP调试器是处理和优化ABAP代码开发与维护工作的核心资源,它配备了多样的功能来协助开发人员在运行状态下进行检验和排除故障。此资源着重阐述了ABAP调试器的一些高级特性,涵盖了深入分析调用堆栈、系统级调试、更新会话调试以及提升调试效率的方法。 1. **深入分析调用堆栈**:除了常规的应用程序调试,开发人员有时需要对调用堆栈的内部层级进行深入调试,特别是在错误出现在异步执行的更新处理或系统级程序时。通过启用**系统级调试**,可以访问通常不公开的系统代码,但这也会导致调用堆栈的显著增加,因此需要审慎操作。 2. **系统级调试**:对于不含业务逻辑的系统级程序,开发人员通常无需进行调试。然而,在特定情形下,例如进行错误追踪时,可能需要进入系统代码。借助调试器的“系统调试启用/禁用”选项,可以赋予对系统程序的调试权限。 3. **更新会话调试**:在处理异步更新任务,例如持久化业务数据时,错误可能发生在更新任务内部。激活**更新会话调试**,在更新任务完成后,调试器将自动启动,展示执行路径。比如,在变更成本中心后,通过输入调试指令 "/h" 启动调试,保存后能够看到更新过程中的错误。 4. **分析调用堆栈**:在进行深入调试时,调用堆栈是至关重要的。通过分析调用堆栈,能够定位到引发问题的具体位置,如在VB_V2_NORMAL...

34,875

社区成员

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

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