mysql - 与创建划分字段的联合

时间:2010-03-24 19:56:27

标签: mysql

我需要UNION两个表来创建新字段,其中1表示第一个表,2表示第二个表。

我试过

(
    SELECT field, 1 AS tmp
    FROM table1
)
UNION
(
    SELECT field, 2 AS tmp
    FROM table2
)

但结果是,tmp字段满是“1”。

如何实施?

2 个答案:

答案 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可能是空的吗?


*请参阅documentation for UNION

  

UNION的默认行为是从结果中删除重复的行。可选的DISTINCT关键字除了默认值之外没有任何影响,因为它还指定了重复行删除。使用可选的ALL关键字,不会发生重复行删除,结果包括所有SELECT语句中的所有匹配行。