лимитная оговорка о присоединении? - PullRequest
0 голосов
/ 05 сентября 2011

table1:

id , otherColumn, otherColumn2 ...

table2:

id, table1_id, someOtherColumns...

т.е. отношения один ко многим

Тривиальное объединение будет:

select * from table1 left outer join table2 on table2.table1_id=table1.id;

Я хочу сделать что-то другое: для каждой строки в таблице 1 выведите не более 1 строки из таблицы 2, независимо от того, какие из них являются несколькими. Так же, как я могу ограничить количество результатов при обычном выборе

Возможно ли это? Как?

1 Ответ

1 голос
/ 05 сентября 2011

Возможности:

  1. Используйте дополнительный выбор.Это заставит внутренний набор результатов быть ограниченным.Преимущество заключается в том, что можно использовать операции группировки / агрегирования.(Я не уверен, какие проблемы, если таковые имеются, у MySQL с подвыборками и целостным планированием запросов.)

  2. Используйте WHERE в первичном операторе и позвольте механизму SQL "сделатьвещь".Если WHERE можно «переместить» перед объединением, интеллектуальный механизм сделает это, так как это приведет к меньшему количеству обрабатываемых строк.Я думаю это часть базовой модели реляционной алгебры (для независимых записей), но я не уверен.Посмотрите на план запроса.(Я не использую MySQL, поэтому знаю, какие оптимизации выполняются.)

И, как всегда, проверяйте результаты и запускайте тесты производительности, если это имеет значение.

Удачного кодирования.

...