#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')
Комментариев нет:
Отправить комментарий