MySQL: у меня есть две таблицы, 1 производственная и 1 архивная. Мне нужно выбрать отдельные записи из обеих, поскольку некоторые записи идентичны

#mysql #sql #duplicates #left-join #union

#mysql #sql #дубликаты #левое соединение #объединение

Вопрос:

У меня есть база данных MySQL, содержащая 2 таблицы. 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 |
 ---------- -------------- ------ ```
  

Комментарии:

1. Пожалуйста, покажите нам результат, который вы хотите.

2. Вы пытались «ГРУППИРОВАТЬ» столбцы по их именам?

3. Чем желаемый результат отличается от того, что есть только prod что?

4. @Barmar — спасибо, что указали на это. Я изменил информацию таблицы, чтобы показать разницу и желаемый результат.

5. Как ваш исходный запрос соединяется order_no = 336 в prod с order_no = 335 in archive?

Ответ №1:

Я подозреваю, что вы хотите union , а не join :

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

union удаляет дубликаты между наборами результатов (а также внутри наборов результатов).

Комментарии:

1. Объединение идеально подходило для этой ситуации. Никогда не использовал его раньше. Спасибо!