12. september 2011 - 20:05Der er
3 kommentarer og 1 løsning
SELECT datoer som IKKE er i tabel?
Kære eksperter,
Jeg har fx en tabel "mintabel" med rows: 1, 2011-01-01 2, 2011-01-02 3, 2011-01-04 4, 2011-01-06
Det, jeg gerne vil have valgt ud, er de datoer, som IKKE findes i "mintabel", altså noget lignende:
SELECT alle datoer WHERE (dato BETWEEN "2011-01-01" AND "2011-01-06") AND IKKE FINDES i mintabel.
Resultatet jeg søger er følgende: , 2011-01-03 , 2011-01-05
Kan dette lade sig gøre?
Jeg har overvejet at oprette en ny tabel med en masse datoer i et bestemt interval og sammenligne (altså en WHERE LEFT/RIGHT JOIN IS NULL). Men typisk er der nogle effektive funktioner :)
ved sq ikke om der er en funktion der kan det - umiddelbart tror jeg det ikke.
et alternativ kunne være - som du næsten selv er inde på - at oprette en tabel med alle datoer (også dem der er i din oprindelige tabel) og lave noget a la:
SELECT * FROM alledatoer WHERE dato NOT IN(SELECT dato FROM mintabel)
SELECT * FROM alledatoer WHERE (dato between "2011-01-01" and "2011-01-31") AND dato NOT IN(SELECT dato FROM mintabel WHERE dato BETWEEN "2011-01-01" and "2011-01-31")
Performance er god.
splazz> vil du sende et svar, så jeg kan give point :)
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.