webForumDet fria alternativet

Hur gör jag en "left join" med en subselect

Databaser & SQL

2 svar · 214 visningar · startad av Engine^

Medlem sedan dec. 20003 887 inlägg
Frågan#1

Jag har ett litet bekymmer med att få ut alla värden jag vill ha ur en tabell. För tillfället ser min fråga ut så här

SELECT k1, k2, (SELECT 'Ja' FROM tblC WHERE lngPK = tblA.lngPK AND blnReady) AS k3
FROM tblA
INNER JOIN tblB ON tblB.lngPK = tblA.lngPK

Tyvärr returnerar denna fråga bara resultat så länge min SELECT 'Ja' inte ger NULL. Går detta att komma undan på något sätt?
En lösning är att göra en LEFT JOIN med tblC istället för subselecten, men det ger mig osnygga dubletter som jag vill vara utan.

Medlem sedan dec. 200012 464 inlägg
#2
SELECT k1, k2, case when exists (select * from tblC
WHERE lngPK = tblA.lngPK AND blnReady) then 'Ja' else 'Nej'
end  AS k3
FROM tblA
INNER JOIN tblB ON tblB.lngPK = tblA.lngPK

Även om jag inte exakt (hm) förstår vad du menar.

Medlem sedan dec. 20003 887 inlägg
#3

Jag borde förstås ha nämnt att jag kör detta i Access än så länge, så case fungerar väl inte.

Annars så verkar det vara nästan precis vad jag menade förutom 'Nej' som i mitt fall ska vara ''.

SELECT k1, k2, IIf((SELECT 1 FROM tblC WHERE lngPK = tblA.lngPK) IS NULL, '', 'Ja') AS k3
FROM tblA
INNER JOIN tblB ON tblB.lngPK = tblA.lngPK

Blir den tolkningen korrekt? Jag har för mig jag testade det innan jag gick från jobbet och blev en smula besviken.

263 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
134 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
135 ms — ändringar (db)