Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL UNION不';t检查是否有匹配的列名--由我决定吗?_Sql - Fatal编程技术网

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
    
即使写在sql下面,它也可以正常工作,因为这里的列数据类型顺序和列数相同

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
    
即使写在sql下面,它也可以正常工作,因为这里的列数据类型顺序和列数相同

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语句甚至不需要名称。所以手动检查正确的列是否对齐是一种方法?当我将两个表合并为多个列时,有什么提示吗?