【问题标题】:Select distinct on two tables在两个表上选择不同的
【发布时间】:2014-04-24 09:28:01
【问题描述】:

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

例如

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、data2、data3,并使用不同的 data1

| 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

【问题讨论】:

  • 你用的是什么关系型数据库?
  • 这很困惑。能否请您显示 table1 和 table2 的内容,而不仅仅是预期的结果?
  • 使用UNION得到需要的结果

标签: sql ms-access


【解决方案1】:

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

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、data2、data3,并使用不同的 data1

问题是你没有说如果两个表中有重复的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)

【讨论】:

  • 如果重复我想要table1结果
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 2022-12-04
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多