#mysql
#mysql
Вопрос:
У меня есть 2 таблицы в Mysql: authors
и articles
.
У меня есть авторы с несколькими статьями для каждой из них.
Мне нужен SQL-запрос с результатом этого запроса: получить 3 автора, упорядоченных по возрасту, со всеми статьями, которые принадлежат каждому из них.
В моем примере это будет
ID FIRSTNAME LASTNAME AGE AUTHORID TITLE PRICE
6 Salido Gomes 90 6 All 3 1
6 Salido Gomes 90 6 All 3 33
6 Salido Gomes 90 6 All 3 3
5 Vitora Mantora 45 5 Total 3 99
5 Vitora Mantora 45 5 Total 3 33
5 Vitora Mantora 45 5 Total 3 12
3 Joe Smith 43 3 Python 5
3 Joe Smith 43 3 Python 2 22
3 Joe Smith 43 3 Python 3 44
3 Joe Smith 43 3 Python 4 12
3 Joe Smith 43 3 Python 5 67
http://sqlfiddle.com /#!2/718c4/1
Я использую
select * from authors join articles on authors.id = articles.authorId
join (select authors.id from authors order by age DESC limit 3) as t
on t.id = authors.id
с неправильным результатом
ID FIRSTNAME LASTNAME AGE AUTHORID TITLE PRICE
6 Salido Gomes 90 6 All 3 1
6 Salido Gomes 90 6 All 3 33
6 Salido Gomes 90 6 All 3 3
Комментарии:
1. Проблема здесь в том, что из ваших 3 старейших авторов 2 не написали никаких статей в тестовых данных, которые вы предоставили (ID 7 и 8) в sql fiddle. Следовательно, возвращаются только сведения об одном авторе.
Ответ №1:
Если вы хотите включить авторов, написавших какие-либо статьи, только в топ-3 старейших авторов, попробуйте выполнить объединение между авторами и статьями в подзапросе, чтобы получить 3 старейших автора, и DISTINCT для устранения дубликатов:-
SELECT *
FROM
(
SELECT DISTINCT authors.id, authors.firstname, authors.lastname, authors.age
FROM authors
JOIN articles
ON authors.id = articles.authorId
ORDER BY authors.age
DESC
LIMIT 3
) author_sub
JOIN articles
ON author_sub.id = articles.authorId