09. december 2004 - 11:34Der er
8 kommentarer og 1 løsning
3 x Join - men hvordan?
Vi har brug for en supermand til sql-join. Problemet er som følger:
Vi har 3 tabeller (tests_infos,test_info,test_info_cat). I tabellen tests_infos har vi kolonnen "body", som vi gerne vil have hentet, og ydermere har vi kolonnen "catid" som skal joines til "test_info_cat.id". Som den sidste join har vi vores tabel "test_info" med kolonnen "infoid", som skal joines på vores "tests_infos.id".
Resultatet vi søger nu, er at vi uanset hvad, altid får det antal rows som ligger i test_info_cat, med tilhørende "body" (hvis det eksisterer, ellers null). Det vigtige er bare at vi altid får det samme antal rows sorteret efter "test_info_cat.id".
Med få tilpasninger i af vores (ret ens? :)) tabelnavne virker det perfekt. Hvis du ligger et svar, får du point. Tak for hjælpen!
Denne select kører: SELECT * FROM ( test_info_cat LEFT JOIN tests_infos ON test_info_cat.id = tests_infos.catid ) LEFT JOIN test_info ON test_info.infoid = tests_infos.id
Uha det ser ikke helt ud til at virke alligevel. Hvis vi sætter en WHERE klausul på, finder den kun de poster der ikke er null. Det vi prøver er følgende:
SELECT tests_infos.body FROM (test_info_cat LEFT JOIN tests_infos ON test_info_cat.id = tests_infos.catid) LEFT JOIN test_info ON test_info.infoid = tests_infos.id WHERE test_info.testid = 1;
SELECT tests_infos.body FROM (test_info_cat LEFT JOIN tests_infos ON test_info_cat.id = tests_infos.catid) LEFT JOIN test_info ON test_info.infoid = tests_infos.id AND test_info.testid = 1;
Ved WHERE finder den ikke den der ikke eksisterer i test_info og ved AND vælger den alle der eksisterer i tests_infos. Den skulle gerne vælge alle poster i tests_infos og erstatte den der ikke eksisterer i test_info med et null.
Synes godt om
Ny brugerNybegynder
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.