Les résultats que vous obtenez sont attendus. Vous devriez avoir un identifiant différent pour C++ et cela conduirait aux résultats souhaités.
Vous devez ajouter une colonne ID dans le B
table que vous utiliseriez dans le C
table (comme une clé étrangère) afin que vous puissiez filtrer les résultats.
La résolution de ce problème de conception de base de données vous aidera à résoudre ce problème car votre conception actuelle est défectueuse.
La requête résultante devrait ressembler à :
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;
Aussi, je recommanderais d'utiliser IDENTITY
id colonnes qui s'incrémentent automatiquement afin que vous ne rencontriez pas de problèmes d'intégrité.