Отменить выбор предыдущего выбора - PullRequest
2 голосов
/ 29 января 2010

Я не знаю, это может звучать странно ... но вот моя ситуация ... Я должен выбрать строки из двух таблиц (Table1) и (Table2)

Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>

Но мое ограничение: если Table1 / Table2 возвращают 0 (ноль) строк ... Я не должен возвращать никаких результатов вообще.

То есть ... Если 1-й выбор возвращает, скажем, 10 строк, а 2-й выбор возвращает 0 (ноль) строк, я должен также отозвать первый выбор ...

Является ли временная таблица единственным решением или у нас есть какая-либо другая альтернатива.

Заранее спасибо за ваш ответ ...

  • Радж

Ответы [ 4 ]

1 голос
/ 29 января 2010

Один из подходов заключается в том, чтобы сначала сделать IF EXISTS:

IF EXISTS(SELECT * FROM Table1 WHERE....) AND EXISTS(SELECT * FROM Table2 WHERE....)
    BEGIN
        -- Now do your SELECT on each, as both return results
    END

EXISTS должен дать хорошую производительность, так как он остановится, как только найдет подходящую запись.

0 голосов
/ 29 января 2010

Если вы можете использовать хранимые процедуры, вы можете использовать @@ rowcount, чтобы проверить, дал ли второй запрос какие-либо результаты:

create proc pTest
as

Select * from Table1 Where <SomeCondition>

Select * from Table2 Where <SomeCondition>
if @@rowcount = 0 return

go
0 голосов
/ 29 января 2010

Очевидным, но не столь эффективным решением будет count количество строк в первую очередь (не уверен насчет синтаксиса):

if not exists(select id from Table1 where ...) or not exists(select id from Table1 where ...)
    return

Select * from Table1 Where <SomeCondition>
Select * from Table2 Where <SomeCondition>
0 голосов
/ 29 января 2010

Без дополнительной информации о ваших конкретных запросах, здесь есть вариант. Пока ваши запросы не слишком сложны и не очень интенсивны, это должно работать:

Select * from Table1 Where <SomeCondition>
where exists( Select null from Table2 Where <SomeCondition> );
Select null from Table2 Where <SomeCondition>
where exists ( Select null from Table1 Where <SomeCondition> );

Это выберет строки только в каждом операторе, если другой оператор также вернет любое количество строк больше нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...