Avatar billede folle Nybegynder
19. maj 2002 - 17:08 Der er 12 kommentarer og
1 løsning

Modsat Union

Findes der en funktion i SQL som gør det modsatte af union? Dvs. de tupler som er ens i de to recordset fjernes.
19. maj 2002 - 17:14 #1
Prøv:
SELECT DinTabel1.*
FROM DinTabel1 LEFT JOIN DinTabel2 ON DinTabel1.Bognr = DinTabel2.Bognr
WHERE (((DinTabel2.Bognr) Is Null));
UNION
SELECT DinTabel2.*
FROM DinTabel2 LEFT JOIN DinTabel1 ON DinTabel2.Bognr = DinTabel1.Bognr
WHERE (((DinTabel1.Bognr) Is Null));
Avatar billede kimiwan Nybegynder
19. maj 2002 - 17:17 #2
Mener du sådan her?

SELECT * FROM tabel1 WHERE id NOT IN (SELECT id FROM tabel2)
Avatar billede folle Nybegynder
19. maj 2002 - 17:22 #3
Mit problem er lidt kompliceret. Jeg har disse to Select queries som hver giver en tabel med to attributter (dag og maaned). De tupler som findes i begge tabeller skal derefter fjernes.

Select distinct dag,maaned from reservationer,logbog where logbog.resID=reservationer.resID

Select distinct dag,maaned from reservationer
Avatar billede kimiwan Nybegynder
19. maj 2002 - 17:47 #4
Jeg er ikke sikker på jeg ved hvad en tupel er (?)
Avatar billede folle Nybegynder
19. maj 2002 - 17:48 #5
Det samme som en post.
19. maj 2002 - 17:56 #6
Folle, har du prøvet mit eks.? (jeg er ikke helt sikker på om jeg har fået byttet lidt om på 1 og 2 hist og her!?)

Men princippet må være at du først tager dem som kun findes i den ene og derefter laver en UNION med dem som kun findes i den anden.
Det er det, som jeg har forsøgt i mit eks.

/Thomas
Avatar billede kimiwan Nybegynder
19. maj 2002 - 18:07 #7
folle:

*Skal* du bruge netop de to select queries du har skrevet her allerede til at løse problemet, eller er det i orden at opnå målet på en anden (mere effektiv) måde?

Hvis det godt må opnås på en anden måde, hvad er det da helt præcist dit recordset skal returnere?
Avatar billede folle Nybegynder
19. maj 2002 - 18:19 #8
Sådan se min database ud:

Reservation:
resID,brugerID,dag,maaned,tid

Logbog:
resID,notat

Når en bruger har flere reservationer på samme dag skal disse samles til en post i logbogen som så får resID efter den første reservation. Der vil derfor være poster i reservationer hvis resID ikke findes i logbogen, men som alligevel ikke skal udfyleds igen. Hvis jeg udvælger de dage som brugeren har lavet reservationer og fjerner de dage hvor logbogen er blevet udfyldt får jeg de dage som mangler i logbogen.
19. maj 2002 - 18:38 #9
Hvorfor ikke bare skrive:

SELECT Reservation.*
FROM Reservation LEFT JOIN Logbog ON Reservation.resID= Logbog.ResID
WHERE Logbog.ResID Is Null


Det burde da give det ønskede resultat??!
19. maj 2002 - 18:41 #10
Eller hvis det kun er dagene, du vil have:

SELECT Distinct dag
FROM Reservation LEFT JOIN Logbog ON Reservation.resID= Logbog.ResID
WHERE Logbog.ResID Is Null
Avatar billede folle Nybegynder
19. maj 2002 - 19:06 #11
thomasjepsen>>
Nej. Hvis du læser mit tidligere indlæg vil jeg ikke have de poster med hvor brugeren har udfyldt logbogen for en reservation samme dag.
Avatar billede nih Novice
20. maj 2002 - 04:20 #12
SELECT BrugerId, Dag, måned, Count(LogBog.ResId) AS Antal
FROM LogBog RIGHT JOIN Reservation ON LogBog.ResId = Reservation.resId
GROUP BY BrugerId, Dag, måned
HAVING Count(LogBog.ResId)=0;

Hvad med en COUNT()
Niels
Avatar billede folle Nybegynder
20. maj 2002 - 19:38 #13
nih>>
Super. Det er lige sådan det skal laves. Tak for det.
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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