Представьте себе следующие таблицы:
создать поля таблицы (id int, имя, текст, ...);
создание табличных вещей в ящиках (id int, box_id int, thing enum ('apple,' banana ',' orange ');
А таблицы выглядят так:
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).