我的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函数。
答案 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