#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. Объединение идеально подходило для этой ситуации. Никогда не использовал его раньше. Спасибо!