webForumDet fria alternativet

Hur gör jag för att få null vid inga träffar?

Databaser & SQL

7 svar · 665 visningar · startad av Kristianstad

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

Hej!

Jag ska slå samman en hel del sql-frågor mha. UNION ALL. Problemet är att vissa SELECT-satser inte får någon träff alls.

SELECT Text FROM tblmyndigheter WHERE Nummer=6061 AND Typ=0
UNION ALL
SELECT Text FROM tblmyndigheter WHERE Nummer=6061 AND Typ=1

Jag skulle vilja att det genom dessa alltid blir två värden och ifall inga träffar finns ska den ge kolumnen NULL.

Hur gör jag så att det blir NULL om inga träffar hittas?

Tack på förhand!

Medlem sedan juli 2003555 inlägg
#2

Jag är inte riktigt säker på hur du menar faktiskt.. Kan du ge ett exempel?

(Oavsett vad du menar så känns det som att det borde gå att lösa med nästlade select-satser, där de du har är den inre select-satsen..)

Medlem sedan dec. 2002841 inlägg
#3

Tjena!

Det är en helt vanlig tabell med fyra kolumner (Text,Nummer,Typ och Datum).

Låt oss säga att SELECT Text FROM tblmyndigheter WHERE Nummer=6061 AND Typ=0 inte ger någon träff, men SELECT Text FROM tblmyndigheter WHERE Nummer=6061 AND Typ=1 ger mig 'Kalle Anka', vill jag att min UNION ALL-sats ska ge resultatet:

NULL
Kalle Anka

Kör jag det i dagsläget blir det endast en träff:

Kalle Anka

.

Medlem sedan juli 2003555 inlägg
#4

ah.. nu är jag inte hundra på det här men en vild gissning: hur blir det om du kör med union istället?

Medlem sedan dec. 2002841 inlägg
#5

Resultat trots no rows?

Nja, UNION och UNION ALL spelar ju ingen roll i det här läget.

Vad jag alltså i princip vill ha är något form av värde (eller NULL) när en SELECT-sats inte ger något resultat (no rows).

Hur gör man det?

Medlem sedan maj 20007 492 inlägg
#6

Totalt OT. Men jag läste rubriken som något helt annat.

Medlem sedan juli 2003555 inlägg
#7

Hm.. En join borde kunna fungera? Titta på http://en.wikipedia.org/wiki/Join_(SQL)#Full_outer_join

Medlem sedan dec. 200012 464 inlägg
#8

jag har för mig att du använder SQL server.

select text from
   (select cast(null as char) as text) dt
 where not exists (select * from tblmyndigheter WHERE Nummer=6061 AND Typ=0)
union all
select text from
 (select cast(null as char) as text) dt
 where not exists (select * from tblmyndigheter WHERE Nummer=6061 AND Typ=1)
union all
SELECT Text FROM tblmyndigheter WHERE Nummer=6061 AND Typ=0
UNION ALL
SELECT Text FROM tblmyndigheter WHERE Nummer=6061 AND Typ=1
253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)
125 ms — ändringar (db)