Mysql 从2个表检索数据的SQL查询语法

Mysql 从2个表检索数据的SQL查询语法,mysql,Mysql,我在Mysql中有两个表:authors和articles 我有一些作者,每一篇都有几篇文章 我需要具有此查询结果的sql查询: 检索3位按年龄排序的作者及其所属的所有文章 在我的例子中,它将是 ID FIRSTNAME LASTNAME AGE AUTHORID TITLE PRICE 6 Salido Gomes 90 6 All 3 1 6 Salido Gomes 90

我在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
我用

结果错误

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

如果您只想包括在前三位最老作者中撰写过任何文章的作者,请尝试在子查询中的作者和文章之间进行联接,以获得三位最老作者,并使用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

这里的问题是,在您最老的3位作者中,有2位没有在sql FIDLE中提供的ID 7和ID 8的测试数据中编写任何文章。因此,只返回单个作者的详细信息。
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