Представьте себе следующие таблицы:
создать табличные поля (id int, name text, ...);
создать таблицу вещей в ящиках (id int, box_id int, вещь перечисление («яблоко», «банан», «апельсин»);
И таблицы выглядят так:
Boxes: id | name 1 | orangesOnly 2 | orangesOnly2 3 | orangesBananas 4 | misc thingsinboxes: id | box_id | thing 1 | 1 | orange 2 | 1 | orange 3 | 2 | orange 4 | 3 | orange 5 | 3 | banana 6 | 4 | orange 7 | 4 | apple 8 | 4 | banana
Как выбрать ящики, содержащие хотя бы один апельсин и ничего, кроме апельсина?
Как это масштабируется, если предположить, что у меня есть несколько сотен тысяч коробок и, возможно, миллион вещей в коробках?
Я хотел бы сохранить все это в SQL, если это возможно, а не обрабатывать набор результатов с помощью скрипта.
Я использую как postgres, так и mysql, поэтому подзапросы, вероятно, плохи, учитывая, что mysql не оптимизирует подзапросы (во всяком случае, до версии 6).