在SQL中使用AND OR查询表中的两列的正确方法是什么?

时间:2012-03-17 13:10:24

标签: sql sql-server-2008

我的product表,category1和category2中有两列。在我的类别表中,我有四个不同的类别,如果产品属于该类别,则类别编号属于category1列,如果它同时属于另一个类别,则该类别输入category2列,产品执行不同时属于两种以上的类别。

以下是一个例子:

productID | category1 | category2
1         | 1         |
2         | 1         | 2
3         | 2         | 

因此,类别类型1将始终位于category1列中,如果同一产品属于类别1和2,如上面产品ID 2中所示,则在查询类别类型为2的所有产品时会出现问题

这是我的第一个查询,我想要检索属于类别1的所有产品:

SELECT * FROM products WHERE category1 = 1

我想要检索属于类别2的所有产品的第二个查询:

SELECT * FROM products WHERE category1 = 2 AND OR category2 = 2

我知道第二个查询是错误的,我只是编写它,因为我需要它才能工作。

我无法弄清楚如何使用一个查询查询两列,只能通过编写两个单独的查询,任何建议都值得赞赏。我使用的是SQL Server 2008,因此可能不支持特殊的SQL函数。

2 个答案:

答案 0 :(得分:3)

我会使用以下声明:

SELECT * FROM products WHERE category1 = 2 OR category2 = 2

这将选择列中一列(或两列)中值为2的所有行。此外,您可以将它用于任何值(当然更改值),包括值1.这样可以轻松地在客户端软件(如果有的话)中创建只使用一个变量的预准备语句。

答案 1 :(得分:2)

听起来你想要的是:

Select
    *
From 
    Products
Where
    Category1 = 2 or
    Category2 = 2

但是我想你可能想重新考虑你的桌面设计。每当我看到带有数字后缀的多个simliar列标签时,我认为它是一种设计气味。

另一种方法是创建一个包含2列的单独ProductCategories表:ProductID和Category。你的PK将是两者的复合键。如果您使用此设计,那么您需要查找所有第2类产品的SQL将是:

Select
    Products.*
From 
    Products
Inner Join
    ProductCategories
On
    Products.ProductID = ProductCategories.ProductID
Where
    ProductCategories.Category = 2