21. marts 2007 - 16:29Der er
2 kommentarer og 2 løsninger
Få det hele med i en Outer Left Join
Jeg har en tabel Media med 6 poster, og jeg er interesseret i at få dem alle med i mit udtræk. Bøvlet kommer når jeg inkluderer en WHERE. Uden Where får jeg alle 6 medier med, men med WHERE kommer kun de hvor der er relateret poster.
Jeg tænker jeg skal ud i noget LEFT OUTER JOIN (SELECT ... FROM salesboard_MediaBudget....WHERE salesboard_MediaBudget.AmmountFak > 60000....) men kan ikke umiddelbart få noget til at virke.
Kan nogen omskrive eller lede mig på vej, så nedestående hiver alle medier med ud, uanset om der er poster i mediaBudget som opfylder betingelsen
SELECT salesboard_MediaBudget.AmmountFak, salesboard_MediaBudget.AmmountOms, salesboard_Media.Name FROM salesboard_Media LEFT OUTER JOIN salesboard_MediaBudget ON salesboard_Media.MediaId = salesboard_MediaBudget.Mediaid WHERE salesboard_MediaBudget.AmmountFak > 60000
Hvilken værdi har posterne i feltet AmmountFak?? Er den mindre end (eller lig med) 60000? For så er det derfor de ikke kommer med, når du sætter Where på.
Skriv lige HELE den SQL, hvor de kommer med ud. Det kan hjælpe os...
Jeg tror jeg lavede en lille brøler, idet jeg forsøgte at formindske et større query. Glem det første, og se nedestående
SELECT SUM(salesboard_MediaBudget.AmmountFak) AS Fak, SUM(salesboard_MediaBudget.AmmountOms) AS Oms, salesboard_Media.Name FROM salesboard_Media LEFT OUTER JOIN salesboard_MediaBudget ON salesboard_Media.MediaId = salesboard_MediaBudget.Mediaid GROUP BY salesboard_Media.Name
Dette resulterer i flg. Fak Oms Name 80000,00 90000,00 Test1 NULL NULL Test2 50000,00 50000,00 Test3 50000,00 50000,00 Test4 NULL NULL Test5
Hvis jeg indsætter en WHERE således: SELECT SUM(salesboard_MediaBudget.AmmountFak) AS Fak, SUM(salesboard_MediaBudget.AmmountOms) AS Oms, salesboard_Media.Name FROM salesboard_Media LEFT OUTER JOIN salesboard_MediaBudget ON salesboard_Media.MediaId = salesboard_MediaBudget.Mediaid WHERE salesboard_MediaBudget.AmmountFak > 60000 GROUP BY salesboard_Media.Name
Ja, den gør jo helt som du har bedt den om. EFTER joinet vælger den kun de poster der har AmmountFak > 60000.
Hvis du i stedet for sætter betingelsen ind i joinet, så kan det måske virke. F.eks. sådan her:
SELECT SUM(salesboard_MediaBudget.AmmountFak) AS Fak, SUM(salesboard_MediaBudget.AmmountOms) AS Oms, salesboard_Media.Name FROM salesboard_Media LEFT OUTER JOIN salesboard_MediaBudget ON salesboard_Media.MediaId = salesboard_MediaBudget.Mediaid AND salesboard_MediaBudget.AmmountFak > 60000 GROUP BY salesboard_Media.Name
Hvis det ikke virker, så har jeg en anden idé:
SELECT SUM(salesboard_MediaBudget.AmmountFak) AS Fak, SUM(salesboard_MediaBudget.AmmountOms) AS Oms, salesboard_Media.Name FROM ( SELECT * FROM salesboard_Media WHERE salesboard_MediaBudget.AmmountFak > 60000 ) AS salesboard_Media_WHERE LEFT OUTER JOIN salesboard_MediaBudget ON salesboard_Media_WHERE.MediaId = salesboard_MediaBudget.Mediaid GROUP BY salesboard_Media_WHERE.Name
(Ikke sikker på om det 'AS' skal med eller ej - og har ikke en database her jeg kan teste på).
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.