Запрос MySQL для объединения двух таблиц

#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, этот запрос, который я вам покажу, работает как ВНУТРЕННЕЕ СОЕДИНЕНИЕ.