Given the table authorbook(authid INT, bookid INT), what query finds the books who have authors with more than one book in the table?
Even one level of recursion can induce a mild trance. Escape the trance by taking the problem one step at a time. First write the query that finds the authors with multiple books. Then join an outer query to that on authorid, and have the outer query select bookid.
-- ---------------------------------------------------------------------------
-- Cross-aggregates
-- from the Artful Common Queries page
-- http://www.artfulsoftware.com/infotree/queries.php#1124
-- ---------------------------------------------------------------------------
-- Given the table authorbook(authid INT, bookid INT), what query finds the
-- books who have authors with more than one book in the table?
-- Even one level of recursion can induce a mild trance. Escape the trance
-- by taking the problem one step at a time. First write the query that
-- finds the authors with multiple books. Then join an outer query to that
-- on authorid, and have the outer query select bookid:
SELECT
a1.bookid
FROM
authorbook a1
INNER JOIN (
SELECT authid, count(bookid)
FROM
authorbook a2
GROUP BY
authid
HAVING
COUNT(bookid) > 1
) AS a3 ON a1.authid = a3.authid;