0

2つのテーブルがあります:

|idperson|ワークロード|アクティブ|idpm|名|姓|

| idsupportday | date | fk_person |

そしてこのSQLステートメント:

SELECT person.idperson, person.firstname, person.lastname, person.workload,
       person.active, person.idpm, COUNT(supportday.idsupportday) AS SupportDays,
       MIN(supportday.date) AS FirstDate, MAX(supportday.date) AS LastDate
FROM   person
INNER JOIN supportday 
ON         person.idperson = supportday.fk_person
WHERE      (person.active = 1)
GROUP BY   person.idperson, person.firstname, person.lastname, person.workload,
           person.active, person.idpm

これで、supportdayテーブルが空の場合、空の結果も受け取ります。しかし、私はまだ結果にすべての人が欲しいですperson.active=1

何を変更する必要がありますか?

回答ありがとうございます。

4

2 に答える 2

5

を:に変更INNER JOINLEFT OUTER JOINます

SELECT person.idperson, person.firstname, person.lastname, person.workload,
       person.active, person.idpm, COUNT(supportday.idsupportday) AS SupportDays,
       MIN(supportday.date) AS FirstDate, MAX(supportday.date) AS LastDate
FROM   person
LEFT OUTER JOIN supportday 
ON         person.idperson = supportday.fk_person
WHERE      (person.active = 1)
GROUP BY   person.idperson, person.firstname, person.lastname, person.workload,
           person.active, person.idpm

内部結合は、結合条件に一致する両方のテーブルからの行が少なくとも1つある場合にのみ、行を返します。内部結合は、他のテーブルの行と一致しない行を削除します。ただし、外部結合は、FROM句で指定されたテーブルまたはビューの少なくとも1つからすべての行を返します。ただし、これらの行がWHEREまたはHAVINGの検索条件を満たす場合に限ります。すべての行は、左側の外部結合で参照される左側のテーブルから取得され、右側のテーブルのすべての行は、右側の外部結合で参照されます。

于 2012-04-26T08:37:25.397 に答える
3

INNER JOINに変更LEFT OUTER JOIN

于 2012-04-26T08:36:59.917 に答える