两个选定表或Union查询的查询中的列数不匹配

时间:2014-08-30 09:28:42

标签: sql vb.net ms-access

我在MS Access中遇到错误,错误是"两个选定的表或联合查询的查询中的列数不匹配。"

这是我的SQL查询:

SELECT sale_head.suppliername AS sale_head_suppliername,
sale_head.invoiceno AS sale_head_invoiceno, sale_head.invoicedate,
sale_details.invoiceno AS sale_details_invoiceno, sale_details.suppliername AS       sale_details_suppliername,
sale_details.product_code, sale_details.qty, sale_details.totalkg, sale_details.Rate,   sale_details.subtotal FROM sale_head 

INNER JOIN sale_details ON sale_head.[invoiceno] = sale_details.[invoiceno] 
UNION ALL select 'Total', sum(sale_details.subtotal) from sale_details

WHERE (((sale_head.suppliername)='Ramkrishna Creation'));

我错过了什么吗?如果是,请告诉我。

2 个答案:

答案 0 :(得分:3)

当您将两个或多个查询合并在一起时,每个查询应具有相同数据类型的相同数据列,例如:

SELECT Name,LastName,SUM(Salary) FROM tabel1
UNION
SELECT Text1,Text2,SomeMoney FROM table2

有效(假设Name和Text1,LastName和Text2以及薪水和SomeMoney的数据类型相同,但是:

SELECT Name,LastName,SUM(Salary) FROM tabel1
    UNION
    SELECT Text1,SomeMoney FROM table2

(cloumns计数不匹配)或

SELECT Name,LastName,SUM(Salary) FROM tabel1
    UNION
    SELECT Text1,SomeMoney,Text2 FROM table2

(数据类型不匹配)不是有效的联合语句。

更新:我的回答是根据SQL Standard Definition of Union Statement说明的:

  

UNION运算符用于组合   两个或多个SELECT语句的结果集。

     

请注意,UNION中的每个SELECT语句必须具有相同的名称   列数。列还必须具有类似的数据类型。   此外,每个SELECT语句中的列必须具有相同的顺序。

答案 1 :(得分:1)

在UNION中,两个数据集必须具有相同的列数,但它们不需要是相同的数据类型

  

UNION操作中的所有查询都必须请求相同数量的字段;但是,这些字段不必具有相同的大小或数据类型。

UNION Operation (Microsoft Access SQL)