2011-12-15 57 views
2

因此,我们有3个相关表格:SQL最大条件加入

  • book与属性title, numberofpages
  • personlast nameid
  • writesauthor(= person.id)和book(= book.title

所以我们想找出每个作者的姓氏和他的书页数最高的页码。

我们尝试了这一点:

SELECT lastname, numberofpages 
FROM book, person, writes 
WHERE person.id=writes.author AND book.title=writes.book 

这将返回:

author A number of pages of his book 1 
author A number of pages of his book 2 
author B number of pages of his book 1 

等等...

我们怎样才能使它每次只包含笔者给出一个排只有最高数量的书的页数?我们用max(numberofpages)尝试了各种子查询,但无法使其正常工作。

+0

这是在MySQL吗? – 2011-12-15 15:16:35

+0

使用隐式联接是一个非常糟糕的做法。学习使用显式连接。他们不太容易出错并且更容易维护。 – HLGEM 2011-12-15 15:23:36

回答

2

您必须使用group by条款是这样的:

select p.lastname, max(w.numberofpages) 
from writes w 
inner join person p on p.id = w.author 
inner join books b on b.title = w.book 
group by p.lastname, p.id 
2

您需要组由作者,并挑选max

SELECT person.lastname, max(book.numberofpages) 
FROM book, person, writes 
WHERE person.id=writes.author AND book.title=writes.book 
GROUP BY person.lastname, person.id 

你也应该考虑使用现代化的连接语法,并保存有关使用不同的ID,但相同的姓氏作者信息:

SELECT person.lastname, max(book.numberofpages) 
FROM book 
JOIN writes ON book.title=writes.book 
JOIN person ON person.id=writes.author 
GROUP BY person.id, person.lastname 
+0

如果多位作者具有相同的姓氏,则会失败。还建议使用ansi-92`join`语法 – 2011-12-15 15:17:19

0

您必须使用GROUP BY

SELECT person.lastname, max(writes.numberofpages) 
FROM book, person, writes 
WHERE person.id=writes.author AND book.title=writes.book 
GROUP BY person.lastname, person.id