FAQ |
Kalender |
2008-01-29, 14:19 | #1 | ||
|
|||
Supermoderator
|
Försöker få ihop en SQL-sats som inte riktigt vill sig så hoppas på att någon ser klarare än jag själv just nu. Dessa två satser fungerar:
Nr 1: select q.text, qa.text from q, qa, sq where sq.sID = '" & sID & "' and q.ID = sq.qID and qa.qID = q.ID order by q.ID asc Nr 2: select qa.text from a left outer join qa on a.aID = qa.ID where a.ID in (select a.ID from a where a.sO = (select ID from sO where sID = '" & sID & "' and status = '2' order by ID desc limit 1) and a.sC = '0' and a.uID in (select uID from sP where sID = '" & sID & "' and status <> '66')) Med fungerar menar jag att det inte blir några felmeddelanden. Den andra satsen är möjligen onödigt komplex i nuläget men det beror i så fall på lite experimenterande... Det jag vill är att samtliga värden i qa (de som finns med i Nr 1) ska finnas med i Nr 2 oavsett om de finns med i a eller inte. Min left outer join ger dock ingen effekt på grund av det urval som görs på a..., dvs. Nr 2 ger samma resultat oavsett om denna join är med eller inte. Tips och / eller lösningar mottages tacksamt.
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2008-01-29, 22:26 | #2 | ||
|
|||
Supermoderator
|
Ser nu att jag kanske uttryckte mig lite oklart i frågan. Det är alltså de qa-värden som fås som resultat i No 1 som jag vill ha med i No 2. Som det är nu får man endast ut de som återfinns i a.
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2008-01-30, 12:41 | #3 | ||
|
|||
Nykomling
|
Haha! Skoj att du tror att någon kommer orka tolka vad du vill när du dels döper tabellerna sådär, och sen inte ens pejstar en dump av strukturen på databasen eller iaf försöker förklara hur den ser ut.
Skriv om frågan och försök igen... /Victor |
||
Svara med citat |
2008-01-30, 14:08 | #4 | ||
|
|||
Supermoderator
|
Jag vet mycket väl att den inte ser rolig ut men det hör till ett ännu inte fullt ut lanserat kommersiellt projekt som jag inte kan lämna ut några uppgifter om. Tabellerna har självklart andra namn i verkligheten...
Kan göra ett nytt försök att förklara närmare. ID är vanliga autoincrement-id:n och övriga kolumner med namnet ID i sig hänvisningar till andra tabeller men det är väl ingen överraskning... Detta är det jag "vill göra" men jag får fortfarande inte ut qa-värden som saknas i a: select qa.aText, a.aID, count(a.ID) as nA from a left outer join qa on a.aID = qa.ID where a.sO = (select ID from sO where sID = 'xx' and status = '2' order by ID desc limit 1) and a.sC = '0' and a.uID in (select uID from sp where sID = 'xx' and status <> '66') group by a.aID Vad som står efter where är egentligen irrelevant, det är en massa urval som måste göras på a. Problemet är hur en join ska kombineras med detta urval, om det nu ens är möjligt. Urvalet ställer till det och gör att den trots joinen plockar bort alla värden som inte finns i a-tabellen.
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2008-01-30, 15:54 | #5 | ||
|
|||
Nykomling
|
SELECT ... FROM qa LEFT JOIN a ON qa.id = a.aID WHERE qa.ID IN (SELECT qa.ID FROM q, qa, sq where sq.sID = '" & sID & "' and q.ID = sq.qID and qa.qID = q.ID) AND ...;
|
||
Svara med citat |
2008-01-30, 21:40 | #6 | ||
|
|||
Supermoderator
|
Danke! Ska testa, löste det själv genom att fösa in urvalet i min join men blev tvungen att sticka iväg.
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2008-01-30, 22:24 | #7 | ||
|
|||
Supermoderator
|
Eller, nja, din variant ger tyvärr samma resultat =) Måste fortfarande ha in allt i min join. Men det är löst nu iaf.
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2008-01-31, 00:32 | #8 | ||
|
|||
Supermoderator
|
Löst och löst, hela satsen är klar som både räknar och får ut alla värden men däremot är det en rent ut sagt usel lösning. Hittar dock inget bättre alternativ just nu som ger rätt resultat tack vare det där sketna urvalet som måste göras. Om någon sql-expert känner att de har lite tid över och vill ha en nöt att knäcka så skicka ett pm. Vill slippa lägga ut tabellnamn och sådant just nu....
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2008-01-31, 11:33 | #9 | ||
|
|||
Klarade millennium-buggen
|
Citat:
|
||
Svara med citat |
2008-02-02, 22:20 | #10 | ||
|
|||
Supermoderator
|
Tackar för försöket till hjälp, Magnus_A. Min provisoriska lösning var urusel med tanke på att den körde en outer join med två tabeller som ständigt växer och den ena mycket snabbt, detta innan urvalet görs. Jag hann titta på problemet igen nu ikväll och hittade äntligen en (mycket) bättre lösning. Gjorde två egna tabeller med hjälp av urval och körde sedan en outer join på dessa två och det gick alldeles utmärkt, typ 60 gånger snabbare än den provisoriska varianten =)
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
Svara |
|
|