对此查询使用多个WHERE子句不返回正确的结果集

时间:2016-09-12 14:43:56

标签: sql-server database

我有下表,它包含有关客户及其产品的信息。我期待编写一个查询,返回客户端我正在寻找的特定产品。

创建表

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

所以,让我们说我希望所有客户都使用这些产品,套件10'和' 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.

我需要做的是为一个产品编写查询,然后使用第一个查询的结果为另一个产品编写另一个查询。希望有一个更优雅的解决方案!

1 个答案:

答案 0 :(得分:2)

使用OR代替AND,如:

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

这意味着Prod_nameSuite09Suite08

对于AND的情况,您的意思是Prod_Name应该同时是不可能的。