VDG*_*VDG 2 sql-server-2005 join sql-server
我对 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
;
Run Code Online (Sandbox Code Playgroud)
这里的问题是,我们将如何设置一个有效的 ON 条件?我这样说是因为语法具有以下形式:
table1.column <condition> table2.column
Run Code Online (Sandbox Code Playgroud)
显然,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
Run Code Online (Sandbox Code Playgroud)
我强烈建议您始终为查询中的任何表设置别名,并为select
列表中的每一列使用这些别名。这使得很多更容易看到其中不同的数据元素的来源,使当您添加在今后进行更多的加入更容易。
归档时间: |
|
查看次数: |
35 次 |
最近记录: |