Sql-Server

JOIN 特定語法的 ON 子句?

  • February 28, 2016

我對 JOIN 操作的語法有點好奇,特別是我們設置條件的 ON 子句。假設我們正在對現有表和我們剛剛在 JOIN 中作為子查詢創建的表執行連接,例如:

SELECT DISTINCT ssn, job, identifier, startdate, enddate, salary, ceasing
FROM oldcontracts
JOIN (SELECT DISTINCT name, identifier FROM jobs)
ON oldcontracts.job = jobs.name
;

這裡的問題是,我們將如何設置一個可行的 ON 條件?我這樣說是因為語法具有以下形式:

table1.column <condition> table2.column

顯然,SQL 2005 對我們從何處獲取這些列非常嚴格。這意味著我在 jobs.name 上收到一個錯誤,說它不是有效的標識符。我假設 SQL 會引發此錯誤,因為作業不是在操作中加入的表。

我知道解決這個問題的方法是簡單地將作業設置為 table2 以在 JOIN 中使用,並根據需要調整 SELECT,然後一切都會工作,但我很想知道是否有辦法解決一列一個子查詢,假設該特定子查詢是在 JOIN 操作中用作 table2 的子查詢?

通常,您只需為子查詢起別名(我認為在 SQL Server 中是必需的)

SELECT DISTINCT ssn, job, identifier, startdate, enddate, salary, ceasing
 FROM oldcontracts
      JOIN (SELECT DISTINCT name, identifier 
              FROM jobs) mysubquery
        ON oldcontracts.job = mysubquery.name

我強烈建議您始終為查詢中的任何表設置別名,並為select列表中的每一列使用這些別名。這使得查看不同數據元素的來源變得更加容易,並且在您將來添加其他連接時更容易。

引用自:https://dba.stackexchange.com/questions/130692