SQL UNION不';t检查是否有匹配的列名--由我决定吗?
我很惊讶,SQL UNION不';t检查是否有匹配的列名--由我决定吗?,sql,Sql,我很惊讶,UNION只是连接行,而不检查列名是否匹配 比如说, SELECT 1 AS bar, 2 AS foo UNION ALL SELECT 10 AS foo, 20 AS bar 产生 bar foo 1 2 10 20 然而,我希望SQL会抱怨第一列在两个表中的名称不同 这是SQL的预期行为吗?如果是这样的话,对我来说,语义错误似乎是一个巨大的机会。我可以用什么方法来防止犯这个错误?对于包含大量列的大型UNION,如何确保列以相同的
UNION
只是连接行,而不检查列名是否匹配
比如说,
SELECT
1 AS bar,
2 AS foo
UNION ALL
SELECT
10 AS foo,
20 AS bar
产生
bar foo
1 2
10 20
然而,我希望SQL会抱怨第一列在两个表中的名称不同
这是SQL的预期行为吗?如果是这样的话,对我来说,语义错误似乎是一个巨大的机会。我可以用什么方法来防止犯这个错误?对于包含大量列的大型
UNION
,如何确保列以相同的顺序排列,而不是手动检查?对于UNION
而言,两个表的列名称并不重要。
UNION运算符用于组合两个或多个SELECT语句的结果集
- UNION中的每个SELECT语句必须具有相同数量的 纵队
- 列还必须具有类似的数据类型
- 每个SELECT语句中的列的顺序也必须相同
SELECT 1 AS bar, 2 AS foo -- here number of column in both table is same and data type also same so its fulfill condition on union UNION ALL SELECT 10 AS foo, 20 AS bar
SELECT 1 AS bar, 2 AS foo
UNION ALL
SELECT 10 , 20
因此它不会抛出任何错误,因为无论两个表的列名是什么,UNION都不重要。 UNION运算符用于组合两个或多个SELECT语句的结果集
- UNION中的每个SELECT语句必须具有相同数量的 纵队
- 列还必须具有类似的数据类型
- 每个SELECT语句中的列的顺序也必须相同
SELECT 1 AS bar, 2 AS foo -- here number of column in both table is same and data type also same so its fulfill condition on union UNION ALL SELECT 10 AS foo, 20 AS bar
SELECT 1 AS bar, 2 AS foo
UNION ALL
SELECT 10 , 20
因此它不会抛出任何错误结果的列名由联合查询的最上面部分确定,此后将忽略所有后续列名 但是,union的所有部分返回的列数必须相等,并且每列还必须“兼容”数据类型(例如,同一列中的decimal和integer是“兼容的”) 与列名一样,每列的数据类型由联合查询的最上面部分确定。有时,强制转换为所需的数据类型可能很有用。e、 g
SELECT 1 AS foo, CAST(2 AS DECIMAL(12,4)) AS bar
UNION ALL
SELECT 10 , 20
或
结果的列名由联合查询的最上面部分确定,此后将忽略所有后续列名 但是,union的所有部分返回的列数必须相等,并且每列还必须“兼容”数据类型(例如,同一列中的decimal和integer是“兼容的”) 与列名一样,每列的数据类型由联合查询的最上面部分确定。有时,强制转换为所需的数据类型可能很有用。e、 g
SELECT 1 AS foo, CAST(2 AS DECIMAL(12,4)) AS bar
UNION ALL
SELECT 10 , 20
或
添加:您甚至不需要第二个select语句的名称。所以手动检查正确的列是否对齐是一种方法?当我将所有两个表合并为多个列时,有什么提示吗?要添加:第二个select语句甚至不需要名称。所以手动检查正确的列是否对齐是一种方法?当我将两个表合并为多个列时,有什么提示吗?