在两个表上选择distinct

时间:2014-04-24 09:28:01

标签: sql ms-access

我想在没有重复的表格上选择数据

例如

table1
data1; data2; data3; data4; data5

table2
data1; data2; data3

data1,data2,data3是相同的数据类型

表1

| data1    | data2    | data3    | data4    | data5    |
|----------|----------|----------|----------|----------|
| value1.1 | value2.1 | value3.1 | value4.1 | value5.1 |

表2

| data1    | data2    | data3    |
|----------|----------|----------|
| value1.1 | value2.1 | value3.1 |
| value1.2 | value2.2 | value3.2 |
| value1.3 | value2.3 | value3.3 |

我想从我的两个表中选择具有不同data1的data1,data2,data3

| data1    | data2    | data3    |
|----------|----------|----------|
| value1.1 | value2.1 | value3.1 |
| value1.2 | value2.2 | value3.2 |
| value1.3 | value2.3 | value3.3 |

我希望我的结果只有3列 例如,value1.1来自table1,value1.2来自table2

2 个答案:

答案 0 :(得分:2)

简而言之,您需要以下内容:

SELECT  data1, data2, data3
FROM    table1
UNION /* Union without optional ALL will eliminate duplicates accross the two tables */
SELECT  data1, data2, data3
FROM    table2

但是,您仍需要澄清一些事项。你说:

  

我想从我的两个表中选择具有不同data1的data1,data2,data3

问题在于,如果两个表中存在重复的data1,则不会说明会发生什么。

假设table1的行的值为(1, A, B),而table2的行的值为(1, X, Y)。最终输出中应包含哪一行?
上述查询将包含这两行,因为它们的列不同:data2data3


编辑评论

  

如果重复我想要table1结果

您仍然需要UNION,但您需要控制要在联合中包含哪些行。注意:因为您的查询现在将确保没有重复项,所以您可以使用UNION ALL,因此DMBS不会浪费处理时间来尝试消除不存在的重复项。

SELECT  data1, data2, data3
FROM    table1
UNION ALL
SELECT  data1, data2, data3
FROM    table2
WHERE   NOT EXISTS (SELECT * FROM table1 WHERE table1.data1 = table2.data1)

答案 1 :(得分:0)

你可以试试这个。 UNION将为您提供DISTINCT结果:

SELECT data1, data2, data3 FROM table1
UNION
SELECT data1, data2, data3 FROM table2;