有关left join 与*=的区别

yaoqiangmax 2007-07-11 10:38:19
我用下边的语句访问SQL Server2000中pubs库的job表,可是出来的结果是不一样的
1。select *
from jobs left join
(select top 10 * from jobs) a_tab
on jobs.job_id=a_tab.job_id
where a_tab.job_id is null

2。
select *
from jobs,
(select top 10 job_id from jobs) a_tab
where (jobs.job_id*=a_tab.job_id) and (a_tab.job_id is null)

请高手解释
...全文
120 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
paoluo 2007-07-11
  • 打赏
  • 举报
回复
另外,不建議使用*=這種寫法

Transact-SQL 聯結
在 Microsoft® SQL Server™ 2000 之前的版本中,左、右外部聯結 (Outer Join) 條件必須在 WHERE 子句中使用 *= 與=* 運算子來指定。部份情況中,這種語法可以使用多種方式解譯,可能會導致模糊不清的查詢。SQL-92 批評在 FROM 子句中指定外部聯結的語法而且 SQL-92 不會產生這種模稜兩可的情形,因為 SQL-92 語法更精確,有關在 WHERE 子句中舊的 Transact-SQL 外部聯結語法的詳細資訊並不包含在這個版本中。在未來 SQL Server 版本中可能不會支援這個語法。任何使用 Transact-SQL 外部聯結的陳述式都應該改為使用 SQL-92 的語法。

無論是 FROM 或 WHERE 子句中內部聯結的規格,SQL-92 標準並不支援。WHERE 子句中指定的內部聯結不會有如同 Transact-SQL 外部聯結語法中模稜兩可的相同問題。

paoluo 2007-07-11
  • 打赏
  • 举报
回复
將Where改為And就是一樣的了。


select *
from jobs left join
(select top 10 * from jobs) a_tab
on jobs.job_id=a_tab.job_id
and a_tab.job_id is null

==

select *
from jobs,
(select top 10 job_id from jobs) a_tab
where (jobs.job_id*=a_tab.job_id) and (a_tab.job_id is null)

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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