Kom ihåg mig?
Home Menu

Menu


SQL joins

Ämnesverktyg Visningsalternativ
Oläst 2008-01-29, 13:19 #1
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-29, 21:26 #2
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 11:41 #3
victor- victor- är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2007
Inlägg: 41
victor- victor- är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2007
Inlägg: 41
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
victor- är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 13:08 #4
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 14:54 #5
Crotalus Crotalus är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2004
Inlägg: 40
Crotalus Crotalus är inte uppkopplad
Nykomling
 
Reg.datum: Dec 2004
Inlägg: 40
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 ...;
Crotalus är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 20:40 #6
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 21:24 #7
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-30, 23:32 #8
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-01-31, 10:33 #9
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Magnus_A Magnus_A är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: May 2006
Inlägg: 2 604
Citat:
Originally posted by tartareandesire@Jan 30 2008, 14:08


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

Är det "group by a.aID" som ställer till det?
Magnus_A är inte uppkopplad   Svara med citatSvara med citat
Oläst 2008-02-02, 21:20 #10
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
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
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 12:33.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017