#mysql #sql
#mysql #sql
Вопрос:
Я пытаюсь получить запрос MySQL для объединения двух таблиц. В обеих таблицах есть столбец user_id и date, а остальные столбцы уникальны для каждой таблицы. То, что я ищу, лучше всего объяснить с помощью изображения (imgur). Я пробовал различные объединения и объединения и не могу получить правильную комбинацию. Я также пытался выполнить поиск в stackoverflow, но, вероятно, я не использую правильную терминологию для того, что я хочу сделать.
Описание таблиц в ТЕКСТЕ:
tablel
user_id date animals
1 9/15/2020 Lion
2 8/11/2020 Tiger
3 12/12/2020 Bear
table2
user_id date fruit
1 7/7/2020 apple
2 6/5/2020 pear
4 3/8/2020 peach
output
user_id date animals fruit
1 9/15/2020 Lion
1 7/7/2020 apple
2 8/11/2020 Tiger
2 6/5/2020 pear
3 12/12/2020 Bear
4 3/8/2020 peach
Комментарии:
1. Я думаю, что описание намного понятнее в тексте, чем на картинке.
2. Пожалуйста, добавьте то, что вы пробовали, вместе с информацией, почему это не удалось. Пожалуйста, также добавьте версию mysql, которую вы используете.
3. Спасибо Luuk. Я все еще учусь.
4. К сожалению, я не сохранил ни одной из предыдущих попыток скрипта. Я перепробовал много комбинаций в mysql workbench, и поскольку ни одна из них не работала, я ничего не сохранил. Я использую MySQL 8.*
Ответ №1:
С помощью UNION ALL вы можете добиться этого
SELECT user_id, date, animals, fruit FROM
(
SELECT user_id, date, animals, '' as fruit
FROM table1
UNION ALL
SELECT user_id, date, '', fruit
FROM table2
) t
ORDER BY user_id, animals
Ответ №2:
Вы также можете попробовать ПОЛНОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ:
SELECT user_id, date, animals, '' as fruit
FROM table1
FULL OUTER JOIN table2
ON table1.user_id = table2.user_id AND table1.date = table2.date
Ответ №3:
-- use test;
-- drop table if exists table1;
create table table1(user_id int, `date` date, animals varchar(10));
insert into table1 values(1,'2020/09/15','Lion');
insert into table1 values(2,'2020/11/08','Tiger');
insert into table1 values(3,'2020/12/12','Bear');
-- drop table if exists table2;
create table table2(user_id int, `date` date, fruit varchar(10));
insert into table2 values(1,'2020/07/07','apple');
insert into table2 values(2,'2020/05/06','pear');
insert into table2 values(4,'2020/08/03','peach');
select
user_id,
`date`,
animals,
'' as fruit
from table1
union all
select
user_id,
`date`,
'',
fruit
from table2
order by user_id,`date`;
вывод:
------------ --------- ------------ ----------
| user_id | date | animals | fruit |
------------ --------- ------------ ----------
| 1 | 2020-07-07 | | apple |
| 1 | 2020-09-15 | Lion | |
| 2 | 2020-05-06 | | pear |
| 2 | 2020-11-08 | Tiger | |
| 3 | 2020-12-12 | Bear | |
| 4 | 2020-08-03 | | peach |
------------ --------- ------------ ----------
Ответ №4:
более простой запрос для понимания будет :
SELECT * FROM tablel, table2 WHERE table1.user_id = table2.user_id
вторая таблица должна иметь внешний ключ, который имеет идентификатор, подобный таблице fisrt, этот запрос, который я вам покажу, работает как ВНУТРЕННЕЕ СОЕДИНЕНИЕ.