Avatar billede peterp1 Nybegynder
14. december 2005 - 20:42 Der er 13 kommentarer og
1 løsning

Hjælp til endnu en query

Hej Eksperter

Jeg har to tabeller

Tabel 1 : ValgteEmner
ID  EmnerID
1    133
2    146
3    211

Tabel 2 : Timer
ID    EmneID  MedarbejderID  Møder  Rejser  Aktivitet dato
10    133    219            0,5    <null>  1,5      30-11-2005
11    133    219            1      2      3        25-11-2005


Det Ønskede resultat:
EmneID  MedarbejderID  Møder  Rejser    Aktivitet  dato
133      219            0,5    <null>    1,5        30-11-2005
146      <null>          <null>  <null>    <null>      <null>
211      <null>          <null>  <null>    <null>      <null>

Jeg ønsker altså ALTID at få alle records i valgteEmner og de records fra Timer som passer på mit emneID med dato den 30-11-2005

Håber I forstår...
Avatar billede steen_hansen Forsker
14. december 2005 - 20:44 #1
Kigger med
Avatar billede bromer Nybegynder
14. december 2005 - 20:45 #2
select * from ValgteEmner LEFT JOIN Timer ON (ValgteEmner.EmnerID = Timer.EmneID);

Er det med vilje at du har kaldt det for "EmnerID" og ikke "EmneID" i "ValgteEmner"
Avatar billede bromer Nybegynder
14. december 2005 - 20:45 #3
steen_hansen: Bare et tip. Hvis du rent faktisk "bare" vil have emails når der sker noget i emnet kan du lægge en tom kommentar. Meget smart :)
Avatar billede bromer Nybegynder
14. december 2005 - 20:47 #4
hov.. jeg kan lige se at jeg mangler en WHERE i min query, men det burde være ligetil at smide på.
Avatar billede peterp1 Nybegynder
14. december 2005 - 20:56 #5
bromer: Jeg får kun vist de records som findes i begge tabeller - jeg vil gerne have alle records fra Valgte emner uanset om de findes i time tabellen. I dit forslag med en where sætning får jeg kun vist recorden: 133  219  0,5  <null>  1,5  30-11-2005
Avatar billede bromer Nybegynder
14. december 2005 - 20:59 #6
peterp1. Det forstår jeg ikke. Du skal have fat i et OUTER JOIN. Prøv eventuelt at erstat "LEFT JOIN" med "OUTER LEFT JOIN" eller "LEFT OUTER JOIN".
Avatar billede peterp1 Nybegynder
14. december 2005 - 21:06 #7
bromer: jeg har følgende query

SELECT * FROM ValgteEmner LEFT OUTER JOIN Timer ON ValgteEmner.EmnerID = Timer.EmneID
WHERE (Timer.Dato = CONVERT(DATETIME, '2005-12-30 00:00:00', 102))

Men den giver mig kun en record.
Avatar billede steen_hansen Forsker
14. december 2005 - 21:08 #8
bromer, det prøver jeg næste gang. Tak :o)
Avatar billede peterp1 Nybegynder
14. december 2005 - 21:20 #9
bromer: hvis EmneID'et ikke findes i tabellen Timer, skriver den rigtig nok record: 220  <null>  <null>  <null>  <null>  <null>, men hvis EmneID'et findes med en anden dato så skrives recorden ikke.
Avatar billede dr_chaos Nybegynder
15. december 2005 - 08:10 #10
hvad med
select * FROM ValgteEmner INNER JOIN Timer ON ValgteEmner.EmneID = Timer.EmneID WHERE (Timer.Dato = CONVERT(DATETIME, '2005-11-30 00:00:00', 102))
UNION
select V.*,null AS MedarbejderID, null AS Møder, Null AS  Rejser,Null AS Aktivitet, Null AS  dato  FROM ValgteEmner V WHERE EmneID NOT IN (select * FROM ValgteEmner INNER JOIN Timer ON ValgteEmner.EmnerID = Timer.EmneID WHERE (Timer.Dato = CONVERT(DATETIME, '2005-11-30 00:00:00', 102)))
Avatar billede peterp1 Nybegynder
15. december 2005 - 14:42 #11
dr chaos: Når jeg forsøger mig med din SQL-sætning får jeg følgende fejl:

Only one expression can be specified in the select list when the subquery in not introduced with EXISTS
Avatar billede dr_chaos Nybegynder
15. december 2005 - 14:45 #12
Min fejl prøv lige med:
select * FROM ValgteEmner INNER JOIN Timer ON ValgteEmner.EmnerID = Timer.EmneID WHERE (Timer.Dato = CONVERT(DATETIME, '2005-11-30 00:00:00', 102))
UNION
select V.*,null AS MedarbejderID, null AS Møder, Null AS  Rejser,Null AS Aktivitet, Null AS  dato  FROM ValgteEmner V WHERE EmnerID NOT IN (select EmnerID FROM ValgteEmner INNER JOIN Timer ON ValgteEmner.EmnerID = Timer.EmneID WHERE (Timer.Dato = CONVERT(DATETIME, '2005-11-30 00:00:00', 102)))
Avatar billede peterp1 Nybegynder
15. december 2005 - 15:22 #13
Det virker !!!!

Tusind tak for hjælpen dr chaos, hvis du skriver et svar er pointene dine.

Så bliver det alligevel en god jul.
Avatar billede dr_chaos Nybegynder
15. december 2005 - 16:40 #14
:)
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