Ayant cette 2 tablescomment gauche Inscrivez-vous avec des résultats Table2 à NULL, puis Tableau2 résultats avec le drapeau
CREATE TABLE Table1 (
Table1_Key INT IDENTITY(1,1),
Info NVARCHAR(50),
PRIMARY KEY (Table1_Key)
);
CREATE TABLE Table2 (
Table2_Key INT IDENTITY(1,1),
Info_table2 NVARCHAR(50),
Table1_FKey INT,
Flag BIT NOT NULL,
PRIMARY KEY (Table2_Key,Table1_FKey),
FOREIGN KEY (Table1_FKey) REFERENCES Table1(Table1_Key)
);
avec des valeurs comme ce
INSERT INTO Table1
VALUES ('Record 1'), ('Record 2'), ('Record 3')
INSERT INTO Table2
VALUES ('test 1',1,1), ('test 2',1,0), ('test 3',1,1),
('test 1',2,0), ('test 2',2,1), ('test 3',2,2)
Il est possible de faire une LEFT JOIN
avec Table2
que sélectionner tout Table1
avec des valeurs NULL sur Table2
AND
les valeurs Table2
avec le Flag
dans 1?
Résultat attendu:
Table1_Key Info Table2_Key Info_table2 Table1_FKey Flag
------------------------------------------------------------------
1 Record 1 NULL NULL NULL NULL
2 Record 2 NULL NULL NULL NULL
3 Record 3 NULL NULL NULL NULL
1 Record 1 1 test 1 1 1
1 Record 1 3 test 3 1 1
2 Record 2 5 test 2 2 1
2 Record 2 6 test 3 2 1
la jointure, je suis en train de faire ce qui ne fonctionne pas:
SELECT * FROM Table1
LEFT JOIN Table2
ON Table1_FKey = Table1_Key
WHERE Flag = 1
Changez 'WHERE' en' AND' pour obtenir le comportement true 'left join' – HoneyBadger
ou utilisez la jointure interne –
Il s'agit d'un problème d'ordre de fonctionnement. La jointure se produit en créant des enregistrements NULL. Ensuite, vous les excluez en disant flag = 1. Pour les conserver, déplacez la limite à la jointure afin que la limite soit appliquée dans le cadre de la jointure et que les enregistrements NULL soient conservés. 'LEFT JOIN table2 sur Table1_FKEY = Table1_key AND flag = 1' – xQbert