#sql
#sql
Вопрос:
Я пытаюсь получить записи из базы данных, которые удовлетворяют нескольким условиям.
Однако я не знаю, есть ли какая-либо запись, которая удовлетворяет всем условиям, но я все равно хочу получить записи, которые удовлетворяют максимальному количеству условий.
Например, я хочу пиццу с томатным соусом, сыром, пепперони, беконом и грибами.
SELECT *
FROM Pizzas
WHERE Sauce = tomato
AND Cheese = true
AND Pepperoni = true
AND Bacon = true
AND Mushrooms = true
Ничего не возвращает.
Но я все равно хочу пиццу, которая может выполнять максимум этих условий.
Я думал о том, чтобы сделать что-то вроде
SELECT *
FROM Pizzas
WHERE Sauce = tomato
OR Cheese = true
OR Pepperoni = true
OR Bacon = true
OR Mushrooms = true
А затем упорядочивает по количеству выполненных условий.
Но я не знаю, возможно ли это, и если да, то как это сделать?
Комментарии:
1.
tomato
это столбец с именем tomato .'tomato'
является строковым литералом, содержащим tomato.2. Логический синтаксис теста должен быть
column IS TRUE
.3. Пометьте свой вопрос базой данных, которую вы используете.
Ответ №1:
Вы можете упорядочить по условиям, которые соответствуют:
SELECT *
FROM Pizzas
WHERE (CASE WHEN Sauce=tomato THEN 1 ELSE 0 END
CASE WHEN Cheese=true THEN 1 ELSE 0 END
CASE WHEN Pepperoni=true THEN 1 ELSE 0 END
CASE WHEN Bacon=true THEN 1 ELSE 0 END
CASE WHEN Mushrooms=true THEN 1 ELSE 0 END
) DESC
FETCH FIRST 1 ROW ONLY
В зависимости от вашей базы данных синтаксис может немного отличаться.
Комментарии:
1. Большое спасибо, я не знал об операторе case 🙂