Как правильно запросить два столбца в таблице, используя AND ИЛИ в SQL? - PullRequest
0 голосов
/ 17 марта 2012

В моей таблице продуктов есть два столбца: категория1 и категория2. В моей таблице категорий у меня есть четыре разных категории, если продукт попадает под эту категорию, номер категории попадает под столбец category1, если он попадает под другую категорию одновременно, эта категория вводится в столбец category2, продукт делает не подпадают под более двух типов категорий одновременно.

Вот пример:

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

Таким образом, тип категории 1 всегда будет находиться в столбце категории 1, и если один и тот же продукт относится к типу категории 1 и 2, как показано выше в идентификаторе продукта 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 ]

3 голосов
/ 17 марта 2012

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

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

Это выберет все строки, имеющие значение 2 в одном (или обоих) столбцах.Более того, вы можете использовать его для любого значения (конечно, изменяя значение), включая значение 1. Это позволяет легко создать подготовленное утверждение в клиентском программном обеспечении (если оно есть), которое использует только одну переменную.

2 голосов
/ 17 марта 2012

Похоже, вам нужно следующее:

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

Однако я думаю, что вы, возможно, захотите пересмотреть дизайн своего стола.Всякий раз, когда я вижу несколько одинаковых меток столбцов с числовыми суффиксами, я воспринимаю это как запах проекта.

Альтернативой является создание отдельной таблицы ProductCategories с двумя столбцами: ProductID и Category.Ваш ПК будет составным ключом обоих.Если бы вы использовали этот дизайн, SQL, который вам нужно было бы найти для всех продуктов категории 2, был бы:

Select
    Products.*
From 
    Products
Inner Join
    ProductCategories
On
    Products.ProductID = ProductCategories.ProductID
Where
    ProductCategories.Category = 2 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...