Допустим, у меня есть список корзин, которые могут содержать фрукты с определенным весом:
Table baskets
(id, name)
----------------
1, 'apples, oranges and more'
2, 'apples and small oranges'
3, 'apples and bananas'
4, 'only oranges'
5, 'empty'
Table basket_fruits
(id, basket, fruit, weight)
----------------
1, 1, 'apple', 2
2, 1, 'apple', 3
3, 1, 'orange', 2
4, 1, 'banana', 2
5, 2, 'apple', 2
6, 2, 'orange', 1
7, 3, 'apple', 2
8, 3, 'banana', 2
9, 4, 'orange', 2
SQL Fiddle с этими данными
Я изо всех сил пытаюсь придумать достаточно эффективных запросов для этих двух сценариев:
Я хочу получить все корзины, которые содержат хотя бы одну apple
И хотя бы одну orange
, каждая из которых превышает заданный вес . Таким образом, ожидаемый результат для weight >= 2
составляет
1, 'apples, oranges and more'
и для weight >= 1
это
1, 'apples, oranges and more'
2, 'apples and small oranges'
Я хочу забрать все корзины, которые содержат без фруктов выше данного веса . Так что для weight >= 2
я бы ожидал
5, 'empty'
и для weight >= 3
должно возвращаться
2, 'apples and small oranges'
3, 'apples and bananas'
4, 'only oranges'
5, 'empty'
Весовое ограничение является просто заполнителем для "каждого подотношения должно соответствовать определенным ограничениям". На практике нам нужно ограничить подотношение диапазоном дат, статусом и т. Д., Но я не хотел бы еще больше усложнять пример.
(я использую postgresql, если решение должно быть привязано к базе данных.)