2013-04-06 10 views
1

Возможно ли запустить другой SELECT, основанный на результате первого SELECT?SELECT на основе результата другого SELECT

Например:

SELECT COUNT(*) FROM table1 

Если результат 0, я хочу, чтобы отобразить результат:

SELECT A, B, C FROM table2 

Если результат первого SELECT, НЕ 0, вывести результат первый запрос и IGNORE - второй.

+4

Этот вопрос не показывает каких-либо исследовательских усилий. Очень важно сделать домашнее задание **. Расскажите нам, что вы нашли, и *** почему *** это не соответствовало вашим потребностям. Это демонстрирует, что вы потратили время, чтобы попытаться помочь себе, это избавляет нас от повторения очевидных ответов и, прежде всего, помогает вам получить более конкретный и релевантный ответ. [FAQ] (http://stackoverflow.com/questions/how-to-ask). – Kermit

+0

Все поиски дали решение использовать внутренний выбор, что не имеет значения. Это не связанные запросы – user990635

+0

, какова была ваша поисковая строка google? –

ответ

2

Можно, конечно, запустить второй выбор на основе результатов первого:

Вы можете сделать это:

declare @count integer = (select count(*) from table1) 

if @count = 0 
    select ... from table1 
else 
    select ... from table2 
+0

просто интересно ... если «select count (*) from table1» будет супер длинным запросом и будет снова записан под «else», он сделает все это дважды. можно ли вставить результат @count в «else» без copy-paste? – user990635

+2

да, вы можете использовать 'select @count as [NameHere]' – Phil

+2

Гораздо быстрее - особенно против большой таблицы - сказать 'IF EXISTS (SELECT 1 FROM dbo.table1)' вместо того, чтобы получать счет, что требует полного сканирования самого узкого нефильтрованного индекса. Так как в этом случае вы не заботитесь о счетчике, вы можете использовать «EXISTS» для короткого замыкания при обнаружении одной строки. –

0

Результат первого запроса является граф, так что вы можете использовать чтобы избежать повторного запуска запроса.

DECLARE @count int = (SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS) 

IF @count > 0 
BEGIN 
    SELECT TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION FROM INFORMATION_SCHEMA.COLUMNS 
END 
ELSE 
BEGIN 
    SELECT @count AS total 
END 
+0

Хорошо, я здесь новый. Извините, я не видел, как правильно отформатировать его. –

0

не нужна переменная для вашей проблемы

if EXISTS (select * from table1) 
    select A, B, C from table2 
Смежные вопросы