我需要UNION两个表来创建新字段,其中1表示第一个表,2表示第二个表。
我试过
(
SELECT field, 1 AS tmp
FROM table1
)
UNION
(
SELECT field, 2 AS tmp
FROM table2
)
但结果是,tmp字段满是“1”。
如何实施?
答案 0 :(得分:0)
你很亲密
Create YourNewTable
SELECT field, 1 AS tmp
FROM table1
UNION ALL
SELECT field, 2 AS tmp
FROM table2
答案 1 :(得分:0)
您的查询应该可以正常工作。您应该更改的唯一内容是UNION
应为UNION ALL
以提供更好的效果。如果没有ALL
,它默认为UNION DISTINCT
,这会导致比较重复行*,但是您构建它们的方式可以保证不会有重复项,因此这种额外的检查是浪费时间。以下是一些测试代码,用于验证您正在做的事情应该起作用:
CREATE TABLE table1 (field NVARCHAR(100) NOT NULL);
INSERT INTO table1 (field) VALUES
('foo1'),
('bar1'),
('baz1');
CREATE TABLE table2 (field NVARCHAR(100) NOT NULL);
INSERT INTO table2 (field) VALUES
('foo2'),
('bar2'),
('baz2');
SELECT field, 1 AS tmp
FROM table1
UNION ALL
SELECT field, 2 AS tmp
FROM table2
结果:
'foo1', 1
'bar1', 1
'baz1', 1
'foo2', 2
'bar2', 2
'baz2', 2
如果你只获得tmp等于1的行,那么你的table2可能是空的吗?
UNION的默认行为是从结果中删除重复的行。可选的DISTINCT关键字除了默认值之外没有任何影响,因为它还指定了重复行删除。使用可选的ALL关键字,不会发生重复行删除,结果包括所有SELECT语句中的所有匹配行。