2013-07-10 2 views
1

Это упрощенная таблица, чтобы задать свой вопрос:Два результатов в одном запросе

 Names 
+------+----------+ 
| id | name | 
|------+----------| 
| 1 | Alex | 
|  |   | 
| 2 | John | 
|  |   | 
| 3 | Fred | 
|  |   | 
| 4 | Andy | 
+------+----------+ 

id: primary key 

Как я могу выполнить только одного запроса и принести два имени? У меня есть два идентификатора n1 и n2, и я хочу, чтобы получить две соответствующие названия:

SELECT name1, name2 FROM names WHERE ...n1....n2... 

После выполнения запроса для n1=2 и n2=3 результат должен быть:

+------------+------------+ 
| name1 | name2 | 
+------------+------------+ 
| John  | Fred  | 
+------------+------------+ 

Возможно ли это? Понятия не имею.

ответ

5

Непосредственная, хотя должен выполнить два подзапросов:

SELECT 
(SELECT Name FROM Names WHERE ID = 2) as Name1, 
(SELECT Name FROM Names WHERE ID = 3) as Name2 
0

Вы можете использовать суб выбрать:
ВЫБРАТЬ (SELECT name FROM Names WHERE id = 1) AS name1, (SELECT name FROM Names WHERE id = 2) AS name2

1

SELECT (SELECT Name FROM names WHERE ID = 1), (SELECT Name FROM Имена ГДЕ ID = 2) FROM DUAL

7

Вы можете использовать агрегатную функцию с выражением CASE-:

select 
    max(case when id = 2 then name end) Name1, 
    max(case when id = 3 then name end) Name2 
from names; 

См Demo

+0

+1 другой путь и жить тест! но есть ли смысл предпочесть ваш код против кода @ Фабиана? – deepmax

+0

@MM. Обычно я предпочитаю этот метод, и он только один раз запрашивает таблицу. – Taryn

+2

+1. , , Это лучшее решение, чем выбранный ответ, потому что (1) он сканирует таблицу только один раз и (2) он не будет возвращать ошибку, если для данного идентификатора имеется более одной строки. –

0

мм я надеялся, я понимаю, кажется простым:

SELECT `name` FROM `names` WHERE `id` = '1' OR `id` = '2' LIMIT 2 
+0

Нет, нет! Он выберет одно имя, которое имеет id = 1 и id = 2, что невозможно. Итак, результат равен нулю. – deepmax

+0

изменил AND на OR был ошибкой. – user2207576

+0

Но он возвращает только одно имя, но мне нужно два. – deepmax

Смежные вопросы