2014-01-22 5 views
2

Как использовать результат select в качестве столбца другого select.Выберите результат как столбец другого выберите

Что-то вроде этого:

select a, b, 
    (select t from other_table where other_table.id = my_table.a) as c 
    from my_table 

Если результат other_table был один рекорд не было никаких проблем, но если она имеет более чем одну запись не может продолжаться.

+0

http://stackoverflow.com/questions/7224736/two-select-statements -in-a-single-statement –

+0

Почему бы не присоединиться к обеим таблицам на other_table.id = my_table.a? – Jayvee

+0

Думаю, я должен использовать «курсор» или что-то в этом роде. – Rahmani

ответ

0

Нет, вы не можете использовать подзапрос, как это, потому что в подзапросе вы получите одно значение, и вы не можете выбрать значение в sql-запросе. вы можете выбрать только имя столбца таблицы. Так что это совершенно неправильный формат написания подзапроса.

+0

Tnx, но, как я уже сказал, если в подзапросе есть только одна запись для каждой строки основного запроса, она работает. – Rahmani

+0

Нет, это не сработает мой друг. – Shivam

+0

У меня есть этот запрос (с небольшими изменениями), и она работает сейчас: \t 'SELECT, Id, \t (выбрать точку из точек, где points.serial = table1.serial), как spoint, \t some_other_fields \t из table1' – Rahmani

1

Вы можете использовать CROSS APPLY так:

select a, b, c.t 
from my_table 
cross apply (select t from other_table where other_table.id = my_table.a) as c 
0

Я обычно использую только этот вид запрашивая при подсчете. Например:

SELECT s.name, 
     (SELECT COUNT(*) FROM product as p WHERE p.store_id=s.id) 
FROM store as s 

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

В вашем случае вы можете использовать TOP ключевое слово, чтобы ограничить количество записей в вашем подзапрос к одному:

select a, b, 
    (select TOP 1 t from other_table where other_table.id = my_table.a) as c 
    from my_table 
Смежные вопросы