2008-12-11 4 views
1

В Postgres Я довольно уверен, что вы можете сделать что-то вроде этогоMySQL - встроить счетчик запросов в другой запрос

SELECT 
    authors.stage_name, 
    count(select id from books where books.author_id = authors.id) 
FROM 
    authors, 
    books; 

По существу, в этом примере я хотел бы вернуть список авторов и сколько книг каждый из них имеет написано .... в том же запросе.

Возможно ли это? Я подозреваю, что этот подход является весьма наивным ..

спасибо :)

ответ

1

Ну, с одной стороны, она возвращает декартово произведение всех авторов книг , независимо от того, написал ли этот автор эту книгу.

Вот как я бы написать запрос, чтобы получить результат, который вы говорите, что хотите:

SELECT a.stage_name, COUNT(b.id) 
FROM authors a 
    LEFT OUTER JOIN books b ON (a.id = b.author_id) 
GROUP BY a.id; 

Вы должны научиться писать присоединиться запросы, если вы используете SQL. Присоединение к SQL, каков цикл для языков программирования приложений. То есть это фундаментальная конструкция программирования, которую вам нужно знать.

0

Как об использовании объединения:

SELECT authors.stage_name, count(*) 
FROM authors INNER JOIN books on books.author_id = authors.id 
GROUP BY authors.stage_name 

 Смежные вопросы

  • Нет связанных вопросов^_^