Помогите с запросом: кол-во записей в подчиненной таблице

Knoo
Дата: 08.09.2006 15:08:11
Помогите, плз, с таким запросом. Есть таблицы: родительская и подчиненная. Нужно вернуть все записи родительской, чтобы для каждой указывалось соответствующее ей количество записей в подчиненной. В целом, просто вроде бы:
SELECT ..., COUNT(*)
FROM 
    MasterTable, 
    ChildTable
WHERE 
    MasterTable.Id = ChildTable.MasterId
GROUP BY 
    MasterTable.Id, ...
Проблема в том, что если для какой-то записи в главной таблице нет соотв. записей в подчененной, то эта запись в выборку не попадет, а хочется, чтобы попала со значением "0" в последнем столбце.
злой шаман
Дата: 08.09.2006 15:11:47
SELECT ..., (select COUNT(*) from ChildTable where MasterTable.Id = ChildTable.MasterId)
FROM MasterTable
RENaissance
Дата: 08.09.2006 15:18:07

IMHO, кореллеряционный запрос - не есть хорошо.
Как вариант:
select MasterTable.Id,..., count(ChildTable.MasterId)
from MasterTable
left join ChildTable on
  MasterTable.Id = ChildTable.MasterId
group by MasterTable.Id, ...



Posted via ActualForum NNTP Server 1.3

злой шаман
Дата: 08.09.2006 15:31:06
RENaissance
IMHO, кореллеряционный запрос - не есть хорошо.
Планы абсолютно идентичны (mssql2k):
select name,id,xtype,
(select count(*) from syscolumns sc where sc.id = so.id) 
from sysobjects so

select so.name,so.id,so.xtype,count(sc.id)
from sysobjects so
left outer join syscolumns sc on sc.id = so.id
group by so.name,so.id,so.xtype

Отсутствие группировки тоже плюс, а если есть text или image поля - решающий плюс.
Knoo
Дата: 08.09.2006 16:03:07
Спасибо, буду пробовать