3 Stimmen

Quellcode der SQL-Abfrage

Ich habe 3 Tabellen. An einem Tisch sitzen alle Leute, [Pat] jeweils mit einer eindeutigen [PatId] . Die zweite Tabelle enthält alle Informationen über die Versicherungsgesellschaft, [Ins] jeweils mit einer eindeutigen [InsId] . Die dritte Tabelle enthält die Versicherungsdaten des Patienten, [PatIns] . Im [PatIns] Tabelle, einige Patienten (auch [PatId] ) haben eine Zweit- oder Drittversicherung und es wird angegeben in [InsType] als 1, 2, oder 3. Ich brauche eine SQL-Abfrage, die nicht nur die 3 Tabellen verbindet, sondern auch die Daten zurückgibt, wenn ein Patient eine Zweit- oder Drittversicherung hat. Bis jetzt habe ich:

SELECT * 

FROM [XEREX_TEST].[dbo].[xrxPat], 

[XEREX_TEST].[dbo].[xrxIns],

[XEREX_TEST].[dbo].[xrxPatIns]

[XEREX_TEST].[dbo].[xrxPatIns] AS INS2,

[XEREX_TEST].[dbo].[xrxPatIns] AS INS3 

WHERE [xrxPat].[PatId]=[xrxPatIns].[PatId] 

AND [xrxPatIns].[PatId] = INS2.[PatId] 

AND [xrxPatIns].[PatId] = INS3.[PatId]

AND [xrxIns].[RecNo]=[xrxPatIns].[InsId] 

AND [xrxPatIns].[InsType]=1

AND INS2.[InsType]=2 

AND INS3.[InsType]=3;   

Das Problem ist, dass nur Patienten mit 3 Versicherungen zurückgegeben werden. Ich möchte alle Patienten und Nullwerte für die Tabellen INS2 und/oder INS3 zurückgeben, wenn der Patient nur eine Versicherung hat. Haben Sie eine Idee, wie man das machen kann?

2voto

lins314159 Punkte 2480

Dies könnte zwar in der Where-Klausel geschehen, aber am besten ist es, wenn man auf explizite Joins umsteigt, denn dann ist der Code auch leichter zu lesen.

SELECT
  *
FROM [XEREX_TEST].[dbo].[xrxPat]
INNER JOIN [XEREX_TEST].[dbo].[xrxIns]
    ON [xrxPat].[PatId] = [xrxIns].[PatId]
INNER JOIN [XEREX_TEST].[dbo].[xrxPatIns]
    ON [xrxIns].[RecNo] = [xrxPatIns].[InsId]
    AND [xrxPatIns].[InsType] = 1
LEFT JOIN [XEREX_TEST].[dbo].[xrxPatIns] AS INS2
    ON [xrxIns].[RecNo] = INS2.[PatId]
    AND INS2.[InsType] = 2
LEFT JOIN [XEREX_TEST].[dbo].[xrxPatIns] AS INS3
    ON [xrxIns].[RecNo] = INS3.[PatId]
    AND INS3.[InsType] = 3;

0voto

Rob Farley Punkte 15180

Verwenden Sie die JOIN-Schreibweise anstelle von Kommas. Dann machen Sie sie zu LEFT JOINs.

SELECT * 
FROM 
(SELECT * FROM [XEREX_TEST].[dbo].[xrxPatIns] WHERE [InsType]=1) AS INS1
LEFT JOIN
(SELECT * FROM [XEREX_TEST].[dbo].[xrxPatIns] WHERE [InsType]=2) AS INS2
ON INS1.[PatId] = INS2.[PatId]
LEFT JOIN
(SELECT * FROM [XEREX_TEST].[dbo].[xrxPatIns] WHERE [InsType]=3) AS INS3
ON INS1.[PatId] = INS3.[PatId]
JOIN
[XEREX_TEST].[dbo].[xrxPat]
ON [xrxPat].[PatId]=INS1.[PatId] 
JOIN
[XEREX_TEST].[dbo].[xrxIns]
ON [xrxIns].[RecNo]=INS1.[InsId] 
;

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X