2016-09-12 1 views
-1

У меня есть следующая таблица, в которой содержится информация о клиентах и ​​их продуктах. Я хочу написать запрос, который будет возвращать клиентам определенные продукты, которые я ищу.Использование нескольких предложений WHERE с этим запросом не возвращает правильный набор результатов

Создание Таблица

CREATE TABLE [dbo].[MainTable](
    [Client_Name] [nChar](10) NULL, 
    [Client_ID] [int] NULL, 
    [Product_Name] [nChar](10) NULL, 
    [Client_State] [nChar](10) NULL 
) ON [PRIMARY] 

Примеры Вставка отчетности Я использовал

INSERT INTO dbo.MainTable VALUES ('Client_1', 1, 'Suite 09', 'VA') 
INSERT INTO dbo.MainTable VALUES ('Client_2', 2, 'Suite 07', 'VA') 

Таблица

Client_Name Client_ID Prod_Name Client_State 
------------------------------------------------------ 
Client_1  1   Suite 09  VA 
Client_2  2   Suite 07  VA 
Client_2  2   Suite 08  VA 
Client_3  3   Suite 10  VA 
Client_4  4   Suite 10  VA 
Client_4  4   Suite 11  VA 
Client_5  5   Suite 11  VA 

Итак, давайте говорить, что я хочу, чтобы все клиенты с продуктами, «Suite 10 'AND' Suite 11 '. Client_4 соответствует этим критериям.

Запрос Я попытался возвращает пустой результирующий набор:

SELECT [CLIENT_NAME] 
FROM [PRODUCTDB].[dbo].[MainTable] 
WHERE Product_Name = 'Suite 09' AND Product_Name = 'Suite 10' 

Если я попробовать условие OR, я получаю результаты, которые я не хочу. Например, подставляя OR для AND пункта в приведенном выше запросе дает мне:

Client_1 * This client does not have Suite 10, only Suite 09 
Client_3 * This client does not have Suite 09, only Suite 10 
Client_4 * This client is correct, it has both Suite 09 and Suite 10. 

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

+0

См. Http://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

@Strawberry Я внесла некоторые изменения, основанные на вашем предположении, надеюсь, это облегчило понимание того, что я пытаюсь выполнить. Спасибо –

+0

Были ли эти изменения включены предоставление операторов CREATE и INSERT и желаемый результат? – Strawberry

ответ

2

Использование OR вместо AND как:

WHERE Prod_Name = 'Suite09' OR Prod_Name = 'Suite08' 
          ^^ 

Это означает, либо Prod_name является Suite09 или его Suite08

В вашем случае с AND, вы имели в виду сказать Prod_Name должно быть и в то же время что невозможно.

+0

Я думал об использовании OR, но логически, что, похоже, не имеет смысла для меня. Либо он имеет «Suite09», либо имеет «Suite08». Но мне нужно найти случай, когда у него есть оба. Например, использование OR возвращает результаты, которые включают только Suite08. –

+0

Жаль, что я не понял, что вы говорите. Почему бы просто вернуть Suite08, а не 09? – SMA

+0

@SMA Посмотреть IN() !! – Strawberry

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