查询:
USE [IEC]
GO
ALTER VIEW [dbo].[V_AllOA]
AS
SELECT ROW_NUMBER() OVER (ORDER BY OrderId) OAId,
*
FROM (
SELECT *
FROM BranchOrder
WHERE Flag IN (1, 2)
UNION
SELECT *
FROM BranchOrder12_13
WHERE flag IN (1, 2)
UNION
SELECT *
FROM BranchOrder11_12
WHERE flag IN (1, 2)
) a
GO
答案 0 :(得分:2)
您的表BranchOrder,BranchOrder12_13,BranchOrder11_12具有不同的列数。它们必须都具有确切的列数并且它们必须具有相同的顺序 - 我的意思是如果第一个表中的第一列是整数,则其他表中的第一列也必须是整数。
答案 1 :(得分:1)
使用union时,您必须确保所有列,包括 ORDER 和 TYPE 都相同。
例如:table1
ID, NAME , LASTNAME
1 'john' 'smith'
table2 -
ID , NAME , MIDDLENAME , LASTNAME
4 'john' 'bing' 'smith'
在上面的示例中,两个表都不能使用select *进行联合,因为它们具有不同的列数。
在这种情况下,您可以指定select语句中两个表上显示的相同列,如下所示:
SELECT ID,NAME,LASTNAME from table1
UNION
SELECT ID,NAME,LASTNAME from table2
这是一个正确的查询。
SELECT * FROM table1
UNION
SELECT * FROM TABLE2
这不是一个正确的查询。