У меня есть две таблицы, где вторая связана с первой несколькими записями (1:n
).
В первой таблице есть записи для id_something
(еще одна таблица, но пока не важная) и для каждого дня date_day
.
+-----------+
| Table ONE |
+----+------+-------+----------+----------+
| id | id_something | date_day | created |
+----+--------------+----------+----------+
| 1 | 666 | 2019-1-1 | 2019-1-1 |
| 2 | 666 | 2019-1-1 | 2019-7-7 |
| 3 | 123 | 2019-1-1 | 2019-1-1 |
+----+--------------+----------+----------+
Вторая таблица связана с этим id
и содержит пары ключ-значение.
+-----------+
| Table TWO |
+--------+--+--+-----+
| id_one | foo | bar |
+--------+-----+-----+
| 1 | 1 | 20 |
| 1 | 2 | 21 |
| 2 | 1 | 30 |
| 2 | 2 | 31 |
| 2 | 3 | 32 |
| 3 | 1 | 10 |
+--------+-----+-----+
Я хочу запросить все возможные соединения, так просто, это JOIN:
SELECT *
FROM one
LEFT JOIN two
ON two.id_one = one.id;
+----+--------------+----------+----------+--------+-----+-----+
| id | id_something | date_day | created | id_one | foo | bar |
+----+--------------+----------+----------+--------+-----+-----+
| 1 | 666 | 2019-1-1 | 2019-1-1 | 1 | 1 | 20 |
| 1 | 666 | 2019-1-1 | 2019-1-1 | 1 | 2 | 21 |
| 2 | 666 | 2019-1-1 | 2019-7-7 | 2 | 1 | 30 |
| 2 | 666 | 2019-1-1 | 2019-7-7 | 2 | 2 | 31 |
| 2 | 666 | 2019-1-1 | 2019-7-7 | 2 | 3 | 32 |
| 3 | 123 | 2019-1-1 | 2019-1-1 | 3 | 1 | 10 |
+----+--------------+----------+----------+--------+-----+-----+
Теперь, как вы видите, у меня также есть поле created
. id_something
в сочетании с date_day
может быть таким же, но я хочу иметь только самые последние (created DESC
) пары со второй таблицей.
Так что в этом случае запрос должен вернуть:
+----+--------------+----------+----------+--------+-----+-----+
| id | id_something | date_day | created | id_one | foo | bar |
+----+--------------+----------+----------+--------+-----+-----+
| 2 | 666 | 2019-1-1 | 2019-7-7 | 2 | 1 | 30 |
| 2 | 666 | 2019-1-1 | 2019-7-7 | 2 | 2 | 31 |
| 2 | 666 | 2019-1-1 | 2019-7-7 | 2 | 3 | 32 |
| 3 | 123 | 2019-1-1 | 2019-1-1 | 3 | 1 | 10 |
+----+--------------+----------+----------+--------+-----+-----+
Но я не могу заставить его работать ... Я пытался использовать DISTINCT или даже подзапрос и конструкцию case, но он либо не работает, либо является очень несовместимым. Группировка также не будет возвращать каждую объединенную пару, а только одну строку для каждого id
из таблицы один.
Чего мне не хватает для достижения желаемого результата?
(если бы не использовался специфичный для Oracle синтакс, это был бы бонус.)