Как объединить две таблицы с разными идентификаторами?

#mysql #sql

#mysql #sql

Вопрос:

Извините, что название вопроса немного сбивает с толку, но я просто не могу найти простой способ обобщить вопрос. Давайте начнем с примера.

Есть продукт A, и я должен отслеживать две функции X и Y A. X генерируется каждый день, в то время как Y генерируется ежемесячно. Чтобы сэкономить место, я решаю поместить X, Y в две таблицы, а именно таблицу X и таблицу Y. Итак, таблица X имеет два столбца: date и X; Таблица Y имеет два столбца: date и Y. Однако даты в двух таблицах встречаются с разной частотой. Я хочу соединить две таблицы слева по X, но мне нужно, чтобы отсутствующее значение в Y было заполнено наблюдением за последний месяц.

Таблица X — это:

 date                 X
----------      -------------
2019-01-01           1
2019-01-02           2
2019-01-02           3    
   ...              ...
2019-02-01           32
2019-02-02           33
  

Таблица Y — это:

 date                 Y
----------      -------------
2019-01-01           0
2019-02-01           1
  

Таблица, которую я хочу запросить, является:

 date                 X              Y
----------      -------------   ----------
2019-01-01           1              0
2019-01-02           2              0
2019-01-02           3              0
   ...              ...            ...
2019-01-31           31             0
2019-02-01           32             1
2019-02-02           33             1
  

Таблица X:

Таблица X

Таблица Y:

Таблица Y

Таблица, которую я хочу запросить:

Таблица, которую я хочу запросить

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

1. Большинству людей здесь нужны образцы табличных данных и ожидаемый результат в виде форматированного текста, а не в виде изображений или ссылок на изображения,

2. Спасибо, что напомнили мне, я только что изменил свой вопрос.

3. Итак, каков на самом деле формат даты в таблицах X и Y? на ваших изображениях это 2019/1/1, в вашем тексте это 2019-01-01.

4. Дата — это данные типа datetime, а не строка.

Ответ №1:

Что-то вроде этого:

 SELECT x.date,
       x.x,
       y.y
FROM   x
JOIN   y
  ON   YEAR(x.date) = YEAR(y.date)
 AND   MONTH(x.date) = MONTH(y.date);
  

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

1. Вероятно, вам нужно внешнее соединение.

Ответ №2:

Правильное объединение и ПОРЯДОК ПО должны сделать это

 SELECT x.date, x.X, y.Y
FROM X x
RIGHT JOIN Y y ON YEAR(x.date) = YEAR(y.date) AND MONTH(x.date) = MONTH(y.date)
ORDER BY x.date ASC
  

Ответ №3:

 SELECT 
a.Column1, 
a.column2, 
b.column3
FROM tablename LEFT JOIN anothertable b
ON a.column1 = b.column2;
  

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

1. Можете ли вы объяснить это подробнее? Я не видел столбцов с такими именами в примере данных

2. ну, это было просто для справки

3. Для какой ссылки? Для простого объединения? Как это справляется с требованием «разных идентификаторов»?