【问题标题】:What is the correct way to query two columns in a table using AND OR in SQL?在 SQL 中使用 AND OR 查询表中两列的正确方法是什么?
【发布时间】:2012-03-17 13:10:24
【问题描述】:

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

这是一个例子:

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

所以类别类型 1 将始终在类别 1 列中,如果同一产品属于类别类型 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 函数。

【问题讨论】:

  • 我不明白。你不就是想SELECT * FROM products WHERE category1 = 2 OR category2 = 2吗?
  • 您希望从查询 2 中获得哪个产品 ID(使用您的示例)?
  • 我试过那个解决方案,这只是运行查询的第一部分并且只返回第一部分,在 OR 这样做之后它永远不会返回第二部分。谢谢。
  • 什么是“类别类型 1”:category1categoryX 的值为 1?

标签: sql sql-server-2008


【解决方案1】:

我会使用以下语句:

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

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

【讨论】:

  • 谢谢,我的分页代码犯了一个愚蠢的错误,限制了我的页面,我无法进一步查看查询,也没有注意到,一直以来我都认为查询是错误的做对了。感谢您的回答,它让我意识到错误在我的代码中的其他地方!谢谢!
【解决方案2】:

听起来您想要的是以下内容:

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

不过,我认为您可能需要重新考虑您的餐桌设计。每当我看到多个带有数字后缀的类似列标签时,我都会认为这是一种设计味道。

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

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

【讨论】:

  • 感谢您的建议,我会牢记这一点!谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多