0

これは私の会社のテーブルです

CompanyID, CompanyName

これは私の連絡先テーブルです

ContactID, ContactName, CompanyID

これは私のレポートテーブルです

ReportID, ReportName

これは私の ReportContact テーブル、多対多の関係です

ContactID, ReportID

どのレポートにも割り当てられていない人を含め、1 つの会社のすべての CONTACTID を返したいです。別の連絡先に割り当てられている reportID も返したいです

1 つの連絡先を複数のレポートに割り当てることができます 1 つのレポートを複数の連絡先で構成できます

私の現在のSQLコードは、ReportContactTableで2つのcontactIDしか取得できません

SELECT rc.ContactID, rc.ReportID  from contact c INNER JOIN Reportcontact rc on c.ContactID = rc.ContactID Where CompanyID=1

reportcontact テーブルにない連絡先を含めてすべての連絡先を返すにはどうすればよいですか?

4

2 に答える 2

1

INNER JOINにない行を除外しReportContactます。テーブルからすべての連絡先LEFT JOINが必要な場合に使用してみてください。contact

SELECT rc.ContactID, rc.ReportID  
  FROM contact c LEFT JOIN Reportcontact rc 
    ON c.ContactID = rc.ContactID
 WHERE CompanyID = 1
于 2013-06-11T06:53:23.180 に答える
0

あなたがやろうとしていることを 100% 理解しているとは言えませんが、contact テーブルのすべての行が必要な場合は、INNER 結合ではなく OUTER 結合を使用する必要があります。

INNER という単語を LEFT に変更してみてください。

INNER 結合は、結合条件を満たす行が両方のテーブルに表示されるようにします。

OUTER 結合は、「1 つのテーブルのすべての行に加えて、他のテーブルの結合条件を満たす行を表示してください」と言います。すべての行を表示するテーブルは、キーワード LEFT および right の使用によって異なります。

a left join b on a.id = b.idテーブル a のすべての行と、結合条件を満たす b の行が表示されます

a right join b on a.id = b.idテーブル b のすべての行と、結合条件を満たす a の行が表示されます

于 2013-06-11T06:57:06.913 に答える