Страницы

Поиск по вопросам

понедельник, 6 января 2020 г.

возможно ли два запроса выборки заменить одним?

#mysql #sql


возникла мысль заменить два запроса к базе одним, возможно ли такое сделать?

SELECT  `label` AS  `from` FROM  `city` WHERE  `code` =  'moscow'
SELECT  `label` AS  `to` FROM  `city` WHERE  `code` =  'irkutsk'


Результат который нужно получить одним запросом должен быть:


    


Ответы

Ответ 1



Не совсем понятна БД, которая у вас. При объединении может получиться нежелаемый результат, поэтому запросы могут быть не совсем корректны. Как вариант, можно объединить 2 запроса через UNION (1 столбец, строки друг под другом): SELECT `label` AS `from` FROM `city` WHERE `code` = 'moscow' UNION SELECT `label` AS `to` FROM `city` WHERE `code` = 'irkutsk' Можно сделать так, чтобы было 2 столбца label - to и from: SELECT * FROM (SELECT `label` AS `from` FROM `city` WHERE `code` = 'moscow') c1, (SELECT `label` AS `to` FROM `city` WHERE `code` = 'irkutsk') c2

Ответ 2



В случае, если вас устроит две возвращаемые строки, в первом столбце которых будет указан город, можно поступить следующим образом SELECT `code`, `label` FROM `city` WHERE `code` IN('moscow', 'irkutsk') Если строка должна быть одна, можно поступить следующим образом SELECT from.label AS from, to.table AS to FROM (SELECT `label` FROM `city` WHERE `code` = 'moscow' LIMIT 1) AS from LEFT JOIN (SELECT `label` FROM `city` WHERE `code` = 'irkutsk' LIMIT 1) AS to

Ответ 3



Из запроса: SELECT `code`, `label` FROM `city` WHERE `code` IN('moscow', 'irkutsk') В других СУБД можно получить одну строку простым PIVOT. Но у вас MySQL, так что можно поступить вот так: SELECT MAX(IF(`code`='moscow',`label`,null)) as `from`, MAX(IF(`code`='irkutsk',`label`,null)) as `to` FROM `city` WHERE `code` IN('moscow', 'irkutsk')

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

Отправить комментарий