05. april 2004 - 13:23Der er
23 kommentarer og 1 løsning
Hjælp til forespørgsel?
Hej alle.
Så har jeg igen rodet mig ud i sql'ens kroge.
Jeg skal have lavet et udtræk hvor jeg gerne vil joine en tabel - dog er det ikke alle emner der har en reference til denne tabel.
I mit udtræk vil jeg gerne vise alle fra tabel1 også dem der ikke har nogen reference til tabel2. Dvs den skal ikke inner join - da den så kun tager dem som har alle reference iorden.
Derudover vil jeg gerne filtrere på værdier i tabel2 - men stadig bevare dem som ikke har nogen reference. Dvs jeg skal ende med alle dem der ikke har en reference - plus dem der har en reference betinget på noget.
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Det skal måske lige siges at der under den som måske ikke er refereret kommer et "hierarki" af tabeller også som skal joines - selvfølgelig kun hvis referencen er der..
ok... så hvis jeg bare bruger null som ekstra option hver gang...
Jeg har lidt problemer nemlig når jeg putter de ekstra på. Dvs. SELECT * FROM tabel1 LEFT JOIN tabel2 ON tabel1.id = tabel2.id LEFT JOIN tabel3 ON tabel2.id = tabel3.id
Men jeg tror måske det her hjælper lidt på det.. Er lige ved at prøve at sætte en klausul på af gangen, så ser vi hvad der sker.
Det virker ikke helt synes jeg... Jeg får lidt mindre når jeg putter alle mine left joins på... Selv om jeg betinger alt med OR NULL... Altså kun på de joinede tabeller selvfølgelig...
Nu har jeg fundet problemet - det er når jeg betinger. F.eks SELECT * FROM tabel1 LEFT JOIN tabel2 ON tabel1.id = tabel2.id LEFT JOIN tabel3 ON tabel2.id = tabel3.id WHERE tabel3.Slettet IS NULL AND (tabel3.ID = 8 OR tabel3.Id IS NULL)
Hvis så der findes en post hvor tabel3.id = 9 fx så kommer den ikke med - da tabel3.id selvfølgelig ikke er 9 eller null. Hvordan kan man løse det?
Nej... men problemet er at jeg gerne vil have alle records fra tabel1 med. Så vil jeg gerne se værdien af nogele felter fra dem som har værdien 8 i tabel3.id.
Det kan godt være jeg er ude hvor det ikke kan lade sig gøre - men du har ret i at det ikke bør komme bag på mig det andet - spørgsmålet var mere om det kunne lade sig gøre at få det med alligevel - altå indholdet fra tabel1.
Men nu har jeg bare taget alt fra tabel3 med.. Så kan vi sortere udtrækket i excel e.lign bagefter... :-)
Problemet er vel når jeg begyndet at betinge på de tabeller jeg har left joined.. SÅ kan jeg ikke længere få dem alle med da nogle ikke vil falde ind for betingelsen.
Kunne jeg måske lave min left join som: LEFT JOIN tabel3 ON tabel3.ID = 8 Hvordan ville det virke?
glem det... det virker vist ikke.. .ER vist ved at rode lidt rundt i hovedet nu.. ;-) Så ville jeg pludselig få kryds joins og få en masse flere poster...
Men problemet er lidt at det jeg gerne vil have er et resultat hvor jeg har 4 kolonner til sidst med hver deres status for tabel3. Altså sådan ca sådan her: tabel1.id | tabel2.id | tabel3.værdi (hvor id = 8) |tabel3.værdi (hvor id=9) | tabel3.værdi (hvor id=10)
Derfor vil jeg gerne betinge på tabel3.id = 8 eller null - men alle andre poster med værdi <> 8 skal fremgå som null... Kan du gennemskue det?
Min plan var at lave 3 left joins med forskellige navne "LEFT JOIN tabel3 ON tba.. AS forste" osv.. Og så betinge dem, men jeg får stadig det problem at jeg ikke kan betinge på id=8 pga ovenstående...
LEFT JOIN tabel3 AS tabel3_1 ON tabel1.ID=tabel3_1.ID LEFT JOIN tabel3 AS tabel3_2 ON tabel1.ID=tabel3_2.ID LEFT JOIN tabel3 AS tabel3_3 ON tabel1.ID=tabel3_3.ID
WHERE tabel3_1.værdi=8 AND tabel3_2.værdi=9 AND tabel3.værdi=10
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.