Многократные критерии T-Sql в отношении того, где оговорка - PullRequest
0 голосов
/ 01 июня 2010

Сценарий

Я использую SQL Server 2005 У меня есть запрос T-Sql, который имеет несколько критериев для поиска по предложению WHERE.Я уверен, что я делаю это очень неэффективно и далеко.Как я могу убедиться, что мне не нужно вводить вручную все критерии?Вместо этого я хочу передать критерии с помощью предложения SELECT *.

Текущий код запроса

SELECT * FROM tblBooks
WHERE BookID = 1
OR BookID = 4
OR BookID = 5
OR BookID = 7
OR BookID = 8
OR BookID = 11
OR BookID = 14

Предлагаемый код запроса PSEUDO

SELECT * FROM tblBooks
WHERE BookID = (SELECT BookID FROM tblAuthors WHERE Genre = 'Fiction') 

Комментарии к коду

Как видно из предложенного псевдокода, идея состоит в том, чтобы выбрать список BookID из другого запроса и передать этот список критериев в сам фактический запрос.Как мне сделать это правильно?

Помощь с благодарностью.

Ответы [ 4 ]

3 голосов
/ 01 июня 2010

вы ищете что-то вроде этого

SELECT * FROM tblBooks
WHERE BookID in (SELECT BookID FROM tblAuthors WHERE Genre = 'Fiction') 

Это вернет все данные в таблице tblAuthors, если есть идентификатор книги

3 голосов
/ 01 июня 2010

Ваш псевдокод, не слишком псевдо. Измените = на IN, и все готово.

SELECT * FROM tblBooks 
WHERE BookID IN (SELECT BookID FROM tblAuthors WHERE Genre = 'Fiction')
2 голосов
/ 01 июня 2010

Использовать объединение:

SELECT  b.*
FROM    tblBooks b
        INNER JOIN
                tblAuthors a
                ON b.BookID = a.BookID
WHERE   a.Genre = 'Fiction'

Полагаю, это не ваши настоящие таблицы? Я не могу понять, почему свойство Genre отсутствует в самой книге. Многие авторы пишут в разных жанрах (например, Iain Banks).

0 голосов
/ 01 июня 2010

Просто выбрасываю альтернативы:

SELECT tblBooks.* 
  FROM tblBooks 
 WHERE EXISTS (SELECT *
                 FROM tblAuthors 
                WHERE tblBooks.BookID = tblAuthors.BookID
                  AND tblAuthors.Genre = 'Fiction');

SELECT tblBooks.*
  FROM tblBooks
 WHERE tblBooks.BookID = ANY
(SELECT tblAuthors.BookID
   FROM tblAuthors
  WHERE tblAuthors.Genre = 'Fiction');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...