日期:2014-05-18  浏览次数:20518 次

有关left join 与*=的区别
我用下边的语句访问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)  

请高手解释

------解决方案--------------------
另外,不建議使用*=這種寫法

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 外部聯結語法中模稜兩可的相同問題。