Avatar billede _k Nybegynder
04. februar 2003 - 13:11 Der er 8 kommentarer og
2 løsninger

Sammensat query

Har to tabeller som jeg gerne vil lave en query på.

Tabel 1 "libraries": libraryNum, name, email, zip, completedStep
Tabel 2 "answers": answerNum, libraryNum, questionNum, answer

Jeg vil gerne finde de navne (name) på biblioteker som er nået til completedStep = 6 og har svaret (answer) "1" til spørgsmål 2 (questionNum). Hvordan gør jeg det?

Har selv bikset med en query som ser sådan her ud:

SELECT name FROM libraries WHERE completedStep = 6 AND libraryNum = (SELECT libraryNum FROM answers WHERE questionNum = 1 AND answer = 2)

Skulle mene det er valid SQL, men MySQL vil ikke spise den, hvorfor?
Avatar billede sthen Nybegynder
04. februar 2003 - 13:15 #1
Vil anbefale dig at bruge LEFT JOIN
Avatar billede sthen Nybegynder
04. februar 2003 - 13:17 #2
Fra www.mysql.com:

Some examples:

mysql> SELECT * FROM table1,table2 WHERE table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id;
mysql> SELECT * FROM table1 LEFT JOIN table2 USING (id);
mysql> SELECT * FROM table1 LEFT JOIN table2 ON table1.id=table2.id
    ->          LEFT JOIN table3 ON table2.id=table3.id;
mysql> SELECT * FROM table1 USE INDEX (key1,key2)
    ->          WHERE key1=1 AND key2=2 AND key3=3;
mysql> SELECT * FROM table1 IGNORE INDEX (key3)
    ->          WHERE key1=1 AND key2=2 AND key3=3;
Avatar billede _k Nybegynder
04. februar 2003 - 13:20 #3
kan du give mig et eksempel på hvordan jeg skal gøre (bare sådan ca.) - har ikke prøvet at joine i den store stil før...
Avatar billede sthen Nybegynder
04. februar 2003 - 13:26 #4
øjeblik har lige kunder
Avatar billede mufoxe Nybegynder
04. februar 2003 - 13:35 #5
SELECT libraries.name, library.libraryNum
FROM libraries INNER JOIN answers ON libraries.libraryNum = answers.libraryNum
WHERE questionNum = 1 AND answer = 2
Avatar billede _k Nybegynder
04. februar 2003 - 13:46 #6
mufoxe: kan du forklare hvorfor INNER JOIN virker en hel del hurtigere end LEFT JOIN - kan mærke en markant forskel! (har rimelig mange rækker i answer-tabellen)

sthen: det virker fint, og løser mit problem....
Avatar billede mufoxe Nybegynder
04. februar 2003 - 13:51 #7
heh, jeg forsøgte at skrive det selv, men det bliver en længere forklaring, så jeg fandt dette link i stedet :)

http://groups.google.com/groups?q=inner+join+outer+difference&hl=da&lr=&ie=UTF-8&oe=UTF-8&selm=32659B27.32D5%40voicenet.com&rnum=1
Avatar billede _k Nybegynder
04. februar 2003 - 13:55 #8
Ja, det virker lidt forvirrende, men jeg er i hvert fald kommet i den rigtige retning - mange tak begge to :o)
Avatar billede sthen Nybegynder
04. februar 2003 - 14:01 #9
Det ved jeg ikke
Avatar billede sthen Nybegynder
04. februar 2003 - 14:01 #10
Selv tak
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester