2012-03-20 5 views
0

Мне нужно найти всех покровителей, имеющих по крайней мере 1 тираж. Вот что я сейчас имею, но он находит только один результат. Что я делаю не так?таблица join with count() состояние

SELECT * 
FROM patrons 
    INNER JOIN circulations on circulations.patron_id = patrons.id 
HAVING COUNT(circulations.id) > 0 

Я не дал структуры таблицы, так как считал, что это не нужно для решения. Если это необходимо, дайте мне знать, и я постараюсь, чтобы добавить его к вопросу

ответ

4

Как насчет:

SELECT * FROM patrons 
WHERE EXISTS (SELECT 1 FROM circulations 
       WHERE circulations.patron_id = patrons.id) 
+0

Мне это нравится, потому что он не группирует покровителей. Есть ли способ узнать, сколько циркуляционных записей есть для каждого патрона в том же запросе? – LordZardeck

+0

Конечно, но это другой вопрос, поэтому спросите другого; это тоже был хороший вопрос и имеет хорошие ответы, поэтому не меняйте его. – SingleNegationElimination

3

должно работать:

SELECT * 
FROM patrons 
    INNER JOIN circulations on circulations.patron_id = patrons.id 
GROUP BY patrons.id 
+0

Это должно сделать это, но * только * для MySQL. Другие базы данных * reaaaaaly * ненавижу эту конструкцию. Для них вам нужно будет указать каждый столбец «покровителей» в группе, либо сделать подзапрос только на «patrons.id» и соединить * это * с таблицей 'partrons' во внешнем запросе. +1 в любом случае ... – SingleNegationElimination

0

взглянуть на мой образец:

Предполагается, что имя PatronName является столбиком на вашем столе посетителей.

SELECT PatronName,COUNT(circulations.id) as CountCirculation 
FROM patrons 
    INNER JOIN circulations on circulations.patron_id = patrons.id 
group by PatronName 
HAVING COUNT(circulations.id) > 0 

С уважением

0

Try ...

select * 
from patrons p 
left join circulation c on c.patron_id = p.id 
where not c.patron_id is null