webForumDet fria alternativet

Om kravet inte uppfylls i en LEFT JOIN

Databaser & SQL

8 svar · 363 visningar · startad av peppar

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

har en sql som ser ut såhär:

sql = "select nyheter.newErbjudande, nyheter.*, erbjudanden.* from"&_
"erbjudanden left join nyheter on erbjudanden.erbId =  nyheter.newErbjudande where newId = "&request.querystring("q")

Om sqlen hittar request.querystringen i tabellen nyheter men det inte finns ett relaterat id till tabellen erbjudanden så får jag ju RS.eof or RS.bof?
Hur kommer jag runt det?

/red. Det är ASP mot en access db, vet att det kanske rimmar illa att lägga fråga i aspforumet men jag (trodde/tror) att jag kan komma runt med asp kod. Fast det går väl kanske direkt i sqlen?! :r

Medlem sedan juni 200032 967 inlägg
#2

Re: Om kravet inte uppfylls i en LEFT JOIN

peppar skrev:

Om sqlen hittar request.querystringen i tabellen nyheter men det inte finns ett relaterat id till tabellen erbjudanden så får jag ju RS.eof or RS.bof?

Nej. Så hade det blivit om du använt inner join istället för left join.

Du har dock ett annat fel i din SQL-fråga som gör att den inte borde fungera överhuvudtaget; du saknar mellanslag mellan from och erbjudanden.

så får jag ju RS.eof or RS.bof?
Hur kommer jag runt det?

Rent generellt måste man alltid kontrollera att recordsetet inte är tomt innan man försöker skriva ut värden ifrån det.

If not rs.eof then
    ' wee, lugnt
end if
Medlem sedan dec. 2001873 inlägg
#3

Jag har inte fått min join att fungera riktigt som jag vill. Mitt mål: Att skriva ut specifik post från tabellen NYHETER där fältet newErbjudande refererar till sitt "child" i tabellen erbjudande. Allt fungerar OM det finns ett "child", men jag får end of file om det inte finns ett "child", fast jag vill skriva ut posten från nyhetstabellen... så här ser min SQL ut nu:

"SELECT nyheter.*, erbjudanden.* FROM nyheter "&_
"INNER JOIN erbjudanden ON nyheter.newId = erbjudanden.erbPArent where newId = "&request.querystring("q")
Medlem sedan mars 20032 667 inlägg
#4

peppar skrev:

Allt fungerar OM det finns ett "child", men jag får end of file om det inte finns ett "child", fast jag vill skriva ut posten från nyhetstabellen... så här ser min SQL ut nu:

Vad vill du säga, du har 3 budskap i samma mening. När vill du skriva ut posten från nyhetstabellen?

"SELECT nyheter.*, erbjudanden.* FROM nyheter "&_
"INNER JOIN erbjudanden ON nyheter.newId = erbjudanden.erbPArent where newId = "&request.querystring("q")

I frågan ovan får du enbart träff om ditt villkor stämmer överens i båda tabellerna. Dvs att det finns en koppling mellan nyheter.newId = erbjudanden.erbPArent. Och där newId stämmer överens med värdet i din querystring.

Medlem sedan dec. 2001873 inlägg
#5

K@llen skrev:

Vad vill du säga, du har 3 budskap i samma mening. När vill du skriva ut posten från nyhetstabellen?

peppar skrev:

Allt fungerar OM det finns ett "child",

peppar skrev:

fast jag vill skriva ut posten från nyhetstabellen...

K@llen skrev:

I frågan ovan får du enbart träff om ditt villkor stämmer överens i båda tabellerna. Dvs att det finns en koppling mellan nyheter.newId = erbjudanden.erbPArent. Och där newId stämmer överens med värdet i din querystring.

Bra! Eller dåligt rättare sagt. Det är ju precis det jag far efter, jag vill kunna få ut ett resultat [från tabellen nyheter] även om det inte finns en koppling mellan tabellerna nyheter och erbjudande. Det är det jag undrar hura jag skall åstadkomma?

Medlem sedan mars 20032 667 inlägg
#6
"SELECT nyheter.*, erbjudanden.* FROM nyheter "&_
" LEFT JOIN erbjudanden ON nyheter.newId = erbjudanden.erbPArent where newId = "&request.querystring("q")

Då använder du en LEFT JOIN. Du får då alla rader från tabellen som står till vänster i join-villkoret. Om det finns rader i den högra tabellen som uppfyller join-villkoret då får du även dessa, annars får du en post med null för de kolumner som härstammar från den högra tabellen.

Medlem sedan dec. 2001873 inlägg
#7

Tack, då funkagerar det! Måste gjort något galet innan, för det gick inte lika bra nyssens när jag provade...

Medlem sedan mars 20032 667 inlägg
#8

peppar skrev:

Tack, då funkagerar det! Måste gjort något galet innan, för det gick inte lika bra nyssens när jag provade...

Du hade (i ditt första inlägg) tabellen erbjudanden till vänster och nyheter till höger i join-klausulen. Hade du istället gjort en right join hade det sannolikt fungerat då också (om du rättat till missen @nders påpekade om). ;)

Medlem sedan dec. 200012 464 inlägg
#9

Flyttas från ASP

135 ms totalt · 2 externa anrop · v20260731065814-full.2ae45ccc
0 ms — hämta statistik (cache)
132 ms — hämta tråd, inlägg och bilagor (db)