MySQL: извлечение ненулевых значений с использованием нескольких объединений - PullRequest
0 голосов
/ 06 октября 2018

Я выполняю несколько запросов, которые хочу преобразовать в один запрос с помощью объединений. Мой первый запрос

1)  SELECT * FROM ACT_TABLE1 where  node='5bbcdded' order by Instance_ID desc;

Вывод этого запроса выглядит следующим образом:

ID          Instance_ID NODE
2326600581  23266005612 5bbcdded1
2326524592  23265245712 5bbcdded2
2326523503  23265234213 5bbcdded3
2326523004  23265229614 5bbcdded4

2) Теперь я беру самый верхний Instance_ID и запускаю другой запрос выбора следующим образом

SELECT * FROM ACT_TABLE2 where TOP_INST_ID = '23266005612';

Здесь может быть ситуация, когда select query возвращает null value из вышеприведенного запроса.В этом случае я беру второй самый верхний Instance_ID и запускаю тот же запрос выбора следующим образом

SELECT * FROM ACT_TABLE2 where TOP_INST_ID = '23265245712';

Выходные данные вышеупомянутого запроса возвращают только одну строку, как показано ниже

ID          NEXT_ID     TOP_INSTANCE_ID
232660056   232660056   232652457

3)Теперь я беру самый верхний NEXT_ID и запускаю другой запрос на выборку следующим образом

   SELECT * FROM ACT_TABLE3 where NEXT_ID = '232660056';

Вывод вышеупомянутого запроса возвращает только одну строку, как показано ниже

ID          EXEP_ID     NEXT_ID
232660072   232660139   232660056

4) Теперь явозьмите topmost EXEP_ID и запустите другой запрос на выборку следующим образом

   SELECT field2 FROM ACT_TABLE4 where ID = '232660139';

Вывод вышеуказанного запроса вернет field2, что является моим окончательным результатом

Другими словами, я хочу передатьnode='5bbcdded' в моем first table, чтобы я мог получить значение field2 из моего fourth table

1 Ответ

0 голосов
/ 06 октября 2018
  • Вы можете сделать Inner Join между всеми таблицами, используя их отношения.
  • Затем используйте несколько предложений уровня Order By, начиная с первой таблицы (все в порядке убывания, так как вы хотитесамый верхний из всех таблиц).Мы используем LIMIT 1, чтобы получить первый ряд после сортировки, который будет самым верхним.
  • Inner Join обеспечит игнорирование любых несовпадающих строк (null в следующей таблице).

Попробуйте:

SELECT t4.field2 
FROM ACT_TABLE1 AS t1 
INNER JOIN ACT_TABLE2 AS t2 ON t2.TOP_INST_ID = t1.Instance_ID
INNER JOIN ACT_TABLE3 AS t3 ON t3.NEXT_ID = t2.NEXT_ID 
INNER JOIN ACT_TABLE4 AS t4 ON t4.ID = t3.EXEP_ID 
where t1.node = '5bbcdded'
ORDER BY t1.Instance_ID DESC, t2.NEXT_ID DESC, t3.EXEP_ID DESC 
LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...