首页 > 解决方案 > MySQL:我有两个表,1 个生产表和 1 个存档表。我需要从两者中选择不同的记录,因为有些记录是相同的

问题描述

我有一个包含 2 个表的 MySQL 数据库。 prod正在制作中,并archive已存档记录。列完全相同。 prod中没有所有记录archive

我需要在两个表的 1 个连接中访问不同的记录,所以我不会在 Excel 中复制记录并放弃计算。

SELECT
    a.order_no,
    a.date_of_sale,
    a.cost,
    b.order_no,
    b.date_of_sale,
    b.cost

FROM
    `prod` AS a
    LEFT JOIN `archive` AS b ON a.order_no = b.order_no

结果:

+----------+--------------+------+-------------+-----------------+---------+
| order_no | date_of_sale | cost | order_no(1) | date_of_sale(2) | cost(2) |
+----------+--------------+------+-------------+-----------------+---------+
|      333 | 11-28-2017   |   10 |         333 | 11-28-2017      |      10 |
|      334 | 11-28-2017   |   12 |         334 | 11-28-2017      |      12 |
|      336 | 11-29-2017   |   30 |         335 | 11-28-2017      |      25 |
|      337 | 11-30-2017   |   15 |             |                 |         |
|      338 | 11-30-2017   |   17 |         338 | 11-28-2017      |      17 |
+----------+--------------+------+-------------+-----------------+---------+

如何构建查询以过滤两个表中相同的记录?

我想要的结果:

+----------+--------------+------+
| order_no | date_of_sale | cost |
+----------+--------------+------+
|      333 | 11-28-2017   |   10 |
|      334 | 11-28-2017   |   12 |
|      335 | 11-28-2017   |   25 |
|      336 | 11-29-2017   |   30 |
|      337 | 11-30-2017   |   15 |
|      338 | 11-30-2017   |   17 |
+----------+--------------+------+```

标签: mysqlsqlduplicatesleft-joinunion

解决方案


怀疑你想要union而不是join

select order_no, date_of_sale, cost from prod
union 
select order_no, date_of_sale, cost from archive

union删除结果集之间(以及结果集内)的重复项。


推荐阅读