24. juni 2007 - 17:01Der er
13 kommentarer og 2 løsninger
Tom database påvirker og giver fejl
SELECT tab1.id FROM tab1 , tab2
Ovenstående SQL-sætning giver ingen resultater og jeg har fundet ud af at det skyldes at tabellen 'tab2' er tom. Det er nødvendigt at tab2 står der, da jeg i en anden sammenhæng har behov for at udvide SQL-sætningen, så den tager forbehold for bestemte elementer i 'tab2'. Jeg forstår bare ikke hvor det at 'tab2' står der skulle gå ind og blokere ovenstående, da den jo ikke rigtig har noget med SQL-kaldet at gøre.
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Du bør virkelig finde en introduktionsbog til sql, for ovenstående er ret centralt for at forstå, hvordan sql virker. Hvis den tab1 indeholder 10 og tab2 0 rækker, så giver ovenstående 0 rækker - da 10*0 rækker løbes igennem. Og hvis tab1 indeholder 10 og tab2 indeholder 100 rækker, så giver resultatet 1000 rækker, da der er 10*100 rækker i det, du udvælger.
vil du join'e de to tabeller og kun udvælge, hvor bestemte ting fra den ene matcher bestemte ting fra den anden, så skal du fx bruge INNER JOIN eller LEFT JOIN alt efter, hvad du ønsker.
Sikke en hård tone Barky, men jeg kan jo tage det (snøft snøft).
SELECT DISTINCT( rooms.id ) , rooms.subid , rooms.label FROM rooms , in_room , in_group WHERE rooms.owner='2' OR ( in_room.userid='2' AND in_room.roomid=rooms.id ) OR ( in_group.userid='2' AND in_group.groupid=in_room.groupid AND in_room.roomid=rooms.id )
^^det her er min samlede SQL-sætning. Nogen der kan fortælle hvad jeg skal lege med inner, outer, left eller right JOIN - og måske endda forklare forskellen på disse?
Jeg har tre tabeller der hedder rooms - denne indeholder en række rum samt den egentlige ejer af rummet. in_room - denne indeholder en liste over de brugere eller grupper der er medlem af de forskellige rum. in_group - denne indeholder en liste over de brugere der er medlem af en given gruppe.
I rummet kan der altså være tilknyttet en ejer, brugere eller en hel brugergruppe.
Jeg ønsker at lave en SQL-sætning der henter rum(rooms.id) som brugeren er tilknyttet enten ved, at de er ejere af rummet (rooms.owner) eller at de er tilknyttet rummet som brugere (in_room.userid) eller er tilknyttet en gruppe som er tilknyttet rummet(in_group.userid/in_room.groupid).
SELECT rooms.id , rooms.subid , rooms.label FROM rooms WHERE rooms.owner='2' UNION SELECT rooms.id , rooms.subid , rooms.label FROM rooms , in_room WHERE in_room.roomid=rooms.id AND in_room.userid='2' UNION SELECT rooms.id , rooms.subid , rooms.label FROM rooms , in_room , in_group WHERE in_room.roomid=rooms.id AND in_room.groupid=in_group.groupid AND in_group.userid='2'
UNION ser ud til at være den fornuftige løsning, så kom bare med svar begge to.
Ville dog stadig gerne have en menneskelig forklaring på inner, outer osv. JOIN.
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.