Как в sql запросе ограничить выборку по определенному полю?
Вопрос о том возможно ли в sql запросе как-то указать лимит выборки по определенному полю. Поясню:
Есть таблица книг, есть таблица авторов. Между ними связь, т.е. традиционный пример.
Допустим мне нужно выбрать из таблицы книг все книги авторов Иванов (id=1), Петров (id=2) и Сидоров (id=3).
Т.е. запрос будет такой:
SELECT * FROM books WHERE author_id=1 or author_id=2 or author_id=3;
Но дело в том, что мне нужно извлечь из базы книги этих авторов, но таким образом, чтобы книг Петрова (т.е. книг с author_id=2) в эту выборку попало, например, не более 2-ух. Т.е. книги иванова и сидорова должны быть все, а вот петрова только две.
Возможно это сделать в одном запросе?
Если упрощенно, то как-то так:
CREATE TEMPORARY TABLE IF NOT EXISTS tmp_table AS (SELECT * FROM books WHERE author_id=2 LIMIT 2) ENGINE=MEMORY;
Дальше делаете необходимые вставки:
INSERT INTO tmp_table SELECT * FROM books WHERE author_id IN (2,3,4,5);
А потом делаете SELECT * FROM tmp_table;
Особенно хорошо это дело себя проявляет, когда нужно по разнотипным критериям производить выборки и выводить одним списком.