あなたが得る結果は期待されています。 C ++には別のIDが必要であり、それによって目的の結果が得られます。
B
にID列を追加する必要があります C
で使用するテーブル 結果をフィルタリングできるように(外部キーとして)テーブル。
このデータベース設計の問題を修正すると、現在の設計に欠陥があるため、この問題を解決するのに役立ちます。
結果のクエリは次のようになります:
SELECT *
FROM A
LEFT OUTER JOIN B ON A.id = B.pid
LEFT OUTER JOIN C ON A.id = B.pid AND C.newForeignKeyId=B.newId;
また、IDENTITY
の使用をお勧めします 整合性の問題が発生しないように自動的にインクリメントするid列。