У меня следующий запрос:
SELECT
dev.DeviceName, Count(dom.DomainID) AS CountOfDomains
FROM
tblDevices dev
JOIN
tblIPNumbers ip ON dev.DeviceName = ip.ServerName
JOIN
tblDomains dom ON dom.IPNumberID = ip.IPNumberID
WHERE
dom.PointerTo=0
AND dev.DeviceType='3'
AND (dev.[System]='32' OR dev.[System]='33')
AND dom.ClosedDate IS NULL AND dev.Active=1
GROUP BY
dev.DeviceName
ORDER BY
Count(dom.DomainID)
Таблицы выглядят так:
tblDomains
==========
DomainID int
IPNumberID int
ClosedDate datetime
PointerTo int
tblIPNumbers
============
IPNumberID int
ServerName varchar(200)
tblDevices
==========
DeviceID int
DeviceName varchar(200)
System varchar(10)
DeviceType varchar(10)
Active bit
Пример данных:
tblDomains:
===========
DomainID: 1234 IPNumberID: 1000 ClosedDate: NULL PointerTo: 0
tblIPNumbers:
=============
IPNumberID: 1000 ServerName: WIN2008-01
tblDevices:
===========
DeviceID: 1 DeviceName: WIN2008-01 System: 32 Active: 1 DeviceType: 3
Проблема в том, что если в tblDomains
нет строк, соответствующих IPNumberID
в tblIPNumbers
, я не получаю возвращаемых строк. Я бы хотел, чтобы в этом случае запрос возвращал одну строку 0
для Count(dom.DomainID) AS CountOfDomains
.
Я пробовал различные комбинации соединений LEFT
и RIGHT
, и это кажется простой проблемой, но мой SQL-фу сегодня низок.