Avatar billede mikkel_strack Nybegynder
21. marts 2007 - 16:29 Der 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

Hva høvlede gør jeg? :)
Avatar billede pierrehusted Nybegynder
22. marts 2007 - 10:42 #1
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...
Avatar billede mikkel_strack Nybegynder
22. marts 2007 - 11:12 #2
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

Får jeg dette resultat:

Fak        Oms        Name
80000,00    90000,00    Test1

...hvor jeg i virkeligheden håbede på:

Fak        Oms        Name
80000,00    90000,00    Test1
NULL        NULL        Test2
NULL        NULL        Test3
NULL        Null    Test4
NULL        NULL    Test5

For en god ordens skyld kan jeg nævne at der kun er 3 poster i salesboard_MediaBudget på hhv. de 50.000, 50.000 og 80.000
Avatar billede pierrehusted Nybegynder
22. marts 2007 - 11:44 #3
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å).
Avatar billede mikkel_strack Nybegynder
22. marts 2007 - 11:49 #4
Det første var lige i øjet!

Takker :)
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