sql - SQL Server 中范围变量的范围

标签 sql sql-server tsql variables scope

考虑以下语句:

SELECT a.* 
FROM tblA a 
WHERE a.Name = @Name 

UNION 

(SELECT a.* 
 FROM tblB 
 WHERE a.Name = @Name)

请注意,两个不同表的范围变量(也称为别名)已被赋予相同的名称。

这样做是否存在潜在的冲突或歧义?是否应该在语句中为所有范围变量(别名)指定唯一的名称,例如:

SELECT a.* 
FROM tblA a 
WHERE a.Name = @Name 

UNION 

(SELECT b.* 
 FROM tblB 
 WHERE b.Name = @Name)

经验表明,到目前为止,这已经有效...每个范围变量(别名)的范围似乎并未跨越 UNION,但这是否取决于不支持的行为,或者范围变量(别名)是否具有与此类案例相关的正式定义范围?

最佳答案

你向我抛出了“范围变量”这个术语。我总是看到称为“别名”的构造。

我不是 SQL 标准方面的专家,但我无法理解数据库引擎在重复使用表别名时会出现问题的解释。 UNION 之前和之后的每个 SELECT 语句就是一个功能齐全、完整的 SELECT 语句。这两个陈述完全相互独立——双方都不了解对方的任何情况。无法将第一个查询中的行与第二个查询中的行关联起来,因此我不知道别名如何相互干扰。

您已经证明它可以在 SQL Server 上运行。

我在 SQL Fiddle 上试过了,并且它适用于 MySQL、PostgreSQL 和 SQLite。不幸的是,Oracle 和 MS SQL Server 在 fiddle 站点上已损坏,因此无法在那里进行测试。

关于sql - SQL Server 中范围变量的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40700433/

相关文章:

sql - 快速从sqlserver中选择随机采样

sql - 根据字符修剪字符串

sql-server-2008 - 使用字段的MAX选择记录返回表的MAX忽略条件

sql - Sql Server 中的版本号排序

sql-server - SQL : find continuous date ranges across multiple rows?

mysql 按索引选择返回错误选择

MySQL - 我应该如何索引这个表?

sql - sql中的分组问题

sql - 在sql server中使用LIKE通配符进行查询

php - 字段电子邮件未在 MySQL 表中更新(使用 PDO)