Установить результат одного столбца равным значению другого в выражении LEFT JOIN - PullRequest
0 голосов
/ 10 января 2019

Я соединяю две строки из одной таблицы, которые связаны между собой, в основном это «корневая строка» и последняя обновленная строка. Я надеюсь, что есть способ установить значение строки корневого столбца в строку в последнем обновлении. Только в возвращаемом результате я не хочу обновлять строку базы данных последнего столбца.

/* Table Name:  posts */
+--------+---------+-------------+--------------+
|   ID   |   ROOT  |   PUBLISHED |   DELETED    |
+--------+---------+-------------+--------------+
|   01   |     01  |    FALSE    |     NULL     |
+--------+---------+-------------+--------------+
|   02   |     01  |     NULL    |  01/03/2019  |
+--------+---------+-------------+--------------+
|   03   |     01  |     NULL    |  01/04/2019  |
+--------+---------+-------------+--------------+
|   04   |     01  |     NULL    |     NULL     |
+--------+---------+-------------+--------------+

Запрос, который я пытаюсь выполнить, выбирает строку 04, потому что она самая последняя, ​​и я пытаюсь присоединиться к корневой строке (01), а затем сделать значение строки 04 с "FALSE" в возвращаемом результате, оставаясь "NULL" в базе данных.

SELECT p1.*, p2.ID, p2.PUBLISHED
FROM posts p1
LEFT JOIN posts p2 ON p1.ID = p2.ID
WHERE p1.DELETED = NULL

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

SELECT p1.*, p2.ID, p2.PUBLISHED, p1.PUBLISHED = p2.PUBLISHED
FROM posts p1
LEFT JOIN posts p2 ON p1.ID = p2.ID
WHERE p1.DELETED = NULL

SELECT p1.*, p2.ID, p2.PUBLISHED, p1.PUBLISHED as p2.PUBLISHED
FROM posts p1
LEFT JOIN posts p2 ON p1.ID = p2.ID
WHERE p1.DELETED = NULL

Спасибо всем, кто читает это

1 Ответ

0 голосов
/ 11 января 2019

Вы можете присоединиться к подзапросу, получая наибольший неопознанный идентификатор. Затем также сделайте самостоятельное соединение, чтобы получить рут.

SELECT p1.id,
       p1.root,
       p4.published,
       p1.deleted
       FROM posts p1
            INNER JOIN (SELECT max(p2.id) id
                               FROM posts p2
                               WHERE p2.deleted IS NULL) p3
                       ON p3.id = p1.id
            INNER JOIN posts p4
                       ON p4.id = p1.root;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...