webForumDet fria alternativet

Joina post om det bara finns en med unikt ID?

Databaser & SQL

6 svar · 1 172 visningar · startad av bassebhu

Medlem sedan nov. 20016 480 inlägg
Frågan#1

Hallå!

Jag vill hämta alla poster från tabell A och left joina tabell B och hämta fältet verk_id, men bara om det endast finns en träff. Hur gör jag det smidigast?

T.ex.

SELECT tabell_a.titel, tabell_b.verk_id
LEFT JOIN tabell_b ON tabell_b.rel_id = tabell_a.id
om räkna tabell_b-träffar = 1

Måste jag baka in en till fråga och köra en COUNT eller nåt?

Jag vill alltså få ut fältet titel alltid och verk_id bara om det finns endast en träff (och jag måste då få värdet från fältet verk_id), annars så ska verk_id returnera tomt.

Tack för hjälp!

Medlem sedan feb. 20005 891 inlägg
#2

LIMIT 1?

Medlem sedan nov. 20016 480 inlägg
#3

Ja, fast jag vill bara returnera fältet verk_id om det bara finns en relation i tabell_b. LIMIT 1 begränsar väl bara vad som returneras till 1?

Medlem sedan aug. 20039 340 inlägg
#4

LEFT JOIN matchar normalt även om du får ut noll träffar från den injoinade tabellen. Är det så du vill ha det, eller just precis bara en träff?

Prova:

SELECT tabell_a.titel, tabell_b.verk_id
INNER JOIN tabell_b ON tabell_b.rel_id = tabell_a.id
GROUP BY tabell_a.id
HAVING count(tabell_b.rel_id) = 1;
Medlem sedan nov. 20016 480 inlägg
#5

Jag vill alltid hämta allt från tabell_a så jag gissar att det är LEFT JOIN jag ska ha.
Värdet från tabell_b ska bara hämtas om det finns 1 träff där, annars ska det vara null eller 0 eller vad som helst som kan jämföras med.

Tack för hjälpen!

Medlem sedan aug. 20039 340 inlägg
#6

Ah, då ska du ha en LEFT JOIN, inte INNER som jag skrev i svaret. Som frågan ser ut nu så kommer något bara hämtas ut om det finns precis en matchning i tabell_b, dvs inte om det finns noll matchningar i tabell_b. Jag har även ändrat < till <= i jämförelsen.

SELECT tabell_a.titel, tabell_b.verk_id
LEFT JOIN tabell_b ON tabell_b.rel_id = tabell_a.id
GROUP BY tabell_a.id
HAVING count(tabell_b.rel_id) <= 1;
Medlem sedan nov. 20016 480 inlägg
#7

Sweet, funkar. tack! :)

250 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)