webForumDet fria alternativet

Right Outer Join

6 svar · 235 visningar · startad av kristoffer

kristofferMedlem sedan juni 20001 257 inlägg
#1

Jag har poster lagrade i tabellen tblArticle_art som har en främmande nyckel intId_cat med en relation till fältet intId i tblCategory_cat. I tblArticle_art finns även fältet datDateEnd och i tblCategory_cat finns även fältet strName som innehåller namnet på en kategori. Jag vill välja ut alla artiklar i en angiven kategori. Om det saknas artiklar i kategorin skall kategorinamnet ändå returneras. Därför gör jag följande SQL-fråga:

SELECT art.intId, cat.strName
FROM tblArticle_art AS art RIGHT OUTER JOIN
    tblCategory_cat AS cat ON art.intId_cat = cat.intId
WHERE cat.intId = 5

där jag väljer ut alla artiklar i kategorin 5. Om det finns poster som uppfyller kraven så väljs dessa och innehåller även kategorinamnet, och om det inte finns några poster så får jag ändå en post med art.intId = <NULL> och cat.strName = "nyheter" exempelvis.

Men om jag vill att posterna skall uppfylla ytterligare ett krav,

SELECT art.intId, cat.strName
FROM tblArticle_art AS art RIGHT OUTER JOIN
    tblCategory_cat AS cat ON art.intId_cat = cat.intId
WHERE cat.intId = 5 AND datDateEnd >= '2002-03-01'

så får jag art.intId = <NULL> och cat.strName = <NULL> om det inte finns några poster som uppfyller kraven. Jag vill ju fortfarande ha art.intId = <NULL> och cat.strName = "nyheter" exempelvis.

Vad göra?

LarsGMedlem sedan dec. 200012 464 inlägg
#2
SELECT art.intId, cat.strName
FROM tblArticle_art AS art RIGHT OUTER JOIN
    tblCategory_cat AS cat ON art.intId_cat = cat.intId
AND datDateEnd >= '2002-03-01'
WHERE cat.intId = 5
kristofferMedlem sedan juni 20001 257 inlägg
#3

Tack så mycket. Respekt.

kristofferMedlem sedan juni 20001 257 inlägg
#4

Och om jag vill returnera antal poster i samma SQL-fråga? Om det inte finns några poster vill jag ju ha 0 och inte 1 som det blir nu.

kristofferMedlem sedan juni 20001 257 inlägg
#5

LarsG?

LarsGMedlem sedan dec. 200012 464 inlägg
#6

byt count(*) mot count(columnName) där columnName är någon kolumn i den högra tabellen.

kristofferMedlem sedan juni 20001 257 inlägg
#7

Nja, då får jag 1 om det finns poster i kategorin och ingeting alls om det inte finns några.

Jag vill ha antal poster i kategorin om det finns några och 0 om det inte finns några. Nu gör jag objRS.RecordCount vilket fungerar om det finns några. Om det inte finns några poster blir objRS.RecordCount 1 eftersom jag returnerar kategorinamnet.

Det fungerar alltså inte?

130 ms totalt · 3 externa anrop · v20260731065814-full.2b84b982
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
127 ms — hämta tråd, inlägg och bilagor (db)