Avatar billede snot Nybegynder
29. maj 2001 - 14:02 Der er 3 kommentarer og
1 løsning

Addition af SQL-forespørgsler...

hej;

Jeg har 2 SQL forespørgsler der begge returnerer de samme atributter fra en varelistetabel.

SQL 1 returnerer måske varenummer: 4005
SQL 2 returnerer måske varenummer: 4007, 4009, 4015

Nu vil jeg gerne FRA EN 3. SQL forespørgsel have udskrevet indholdet af SQL og SQL 2 sammen....

DVS :

SQL 3 returnerer måske varenummer: 4005, 4007, 4009, 4015

OBS ! det skal LAVES i SQL....
29. maj 2001 - 14:09 #1
Table [SQL 1] UNION Table [SQL 2]


/Thomas
Avatar billede snot Nybegynder
29. maj 2001 - 14:12 #2
Jeg elsker dig simpelthen !!!!!!

Du har sparet mig for 10000000 timers arbejde...

SuperB
Avatar billede snot Nybegynder
29. maj 2001 - 14:18 #3
Bare for god ordens skyld, viser jeg dig lige hvad resultatet blev.

Det er en forespørgsel der modtager en start- og en slutdato - og udskriver en liste med ledigeværelser på et hotel:

Table (
SELECT vareliste.*
FROM Vareliste LEFT JOIN Forbrug AS Forbrug_1 ON vareliste.varenummer = forbrug_1.varenummer
WHERE vareliste.varenummer < \'1076\' AND Forbrug_1.varenummer  NOT IN (
SELECT DISTINCT Forbrug_1.varenummer
FROM (((vareliste LEFT JOIN kursus ON vareliste.varenummer = kursus.kursusid) LEFT JOIN Forbrug ON vareliste.varenummer = Forbrug.varenummer) LEFT JOIN kursist ON forbrug.cpr = kursist.cpr) LEFT  JOIN Forbrug AS Forbrug_1 ON kursist.cpr = Forbrug_1.cpr
WHERE (((kursus.startdato)<=[indtast_start]) AND ((kursus.slutdato)>=[indtast_start]) AND ((Forbrug_1.varenummer)>\'1000\' And (Forbrug_1.varenummer)<\'1076\') AND ((forbrug.varenummer) In (SELECT [Kursus].[kursusid] FROM Kursus INNER JOIN (Kursist INNER JOIN Forbrug ON [Kursist].[cpr]=[Forbrug].[cpr]) ON [Kursus].[kursusid]=[Forbrug].[varenummer] WHERE [Kursus].[status]=\'Gennemført\' AND kursus.slutdato > now() ))) OR (((kursus.startdato)<=[indtast_slut]) AND ((kursus.slutdato)>=[indtast_slut]) AND ((Forbrug_1.varenummer)>\'1000\' And (Forbrug_1.varenummer)<\'1076\') AND ((forbrug.varenummer) In (SELECT [Kursus].[kursusid] FROM Kursus INNER JOIN (Kursist INNER JOIN Forbrug ON [Kursist].[cpr]=[Forbrug].[cpr]) ON [Kursus].[kursusid]=[Forbrug].[varenummer] WHERE [Kursus].[status]=\'Gennemført\' AND kursus.slutdato > now() ))) OR (((kursus.startdato)>=[indtast_start]) AND ((kursus.slutdato)<=[indtast_slut]) AND ((Forbrug_1.varenummer)>\'1000\' And (Forbrug_1.varenummer)<\'1076\') AND ((forbrug.varenummer) In (SELECT [Kursus].[kursusid] FROM Kursus INNER JOIN (Kursist INNER JOIN Forbrug ON [Kursist].[cpr]=[Forbrug].[cpr]) ON [Kursus].[kursusid]=[Forbrug].[varenummer] WHERE [Kursus].[status]=\'Gennemført\' AND kursus.slutdato > now() ))))
ORDER BY vareliste.varenummer)

UNION table (SELECT *
FROM vareliste
WHERE vareliste.varenummer NOT IN (
SELECT forbrug.varenummer
FROM forbrug
));


........

Dejligt ikke ?

SNoT
29. maj 2001 - 14:39 #4
Ja, det er skønt :o)

Jeg tror endda, at den kan gøres kortere:

SELECT vareliste.*
FROM Vareliste LEFT JOIN Forbrug AS Forbrug_1 ON vareliste.varenummer = forbrug_1.varenummer
WHERE vareliste.varenummer < \'1076\' AND Forbrug_1.varenummer  NOT IN (
SELECT DISTINCT Forbrug_1.varenummer
FROM (((vareliste LEFT JOIN kursus ON vareliste.varenummer = kursus.kursusid) LEFT JOIN Forbrug ON vareliste.varenummer = Forbrug.varenummer) LEFT JOIN kursist ON forbrug.cpr = kursist.cpr) LEFT  JOIN Forbrug AS Forbrug_1 ON kursist.cpr = Forbrug_1.cpr
WHERE (((kursus.startdato)<=[indtast_start]) AND ((kursus.slutdato)>=[indtast_start]) AND ((Forbrug_1.varenummer)>\'1000\' And (Forbrug_1.varenummer)<\'1076\') AND ((forbrug.varenummer) In (SELECT [Kursus].[kursusid] FROM Kursus INNER JOIN (Kursist INNER JOIN Forbrug ON [Kursist].[cpr]=[Forbrug].[cpr]) ON [Kursus].[kursusid]=[Forbrug].[varenummer] WHERE [Kursus].[status]=\'Gennemført\' AND kursus.slutdato > now() ))) OR (((kursus.startdato)<=[indtast_slut]) AND ((kursus.slutdato)>=[indtast_slut]) AND ((Forbrug_1.varenummer)>\'1000\' And (Forbrug_1.varenummer)<\'1076\') AND ((forbrug.varenummer) In (SELECT [Kursus].[kursusid] FROM Kursus INNER JOIN (Kursist INNER JOIN Forbrug ON [Kursist].[cpr]=[Forbrug].[cpr]) ON [Kursus].[kursusid]=[Forbrug].[varenummer] WHERE [Kursus].[status]=\'Gennemført\' AND kursus.slutdato > now() ))) OR (((kursus.startdato)>=[indtast_start]) AND ((kursus.slutdato)<=[indtast_slut]) AND ((Forbrug_1.varenummer)>\'1000\' And (Forbrug_1.varenummer)<\'1076\') AND ((forbrug.varenummer) In (SELECT [Kursus].[kursusid] FROM Kursus INNER JOIN (Kursist INNER JOIN Forbrug ON [Kursist].[cpr]=[Forbrug].[cpr]) ON [Kursus].[kursusid]=[Forbrug].[varenummer] WHERE [Kursus].[status]=\'Gennemført\' AND kursus.slutdato > now() ))))
ORDER BY vareliste.varenummer
UNION SELECT *
FROM vareliste
WHERE vareliste.varenummer NOT IN (
SELECT forbrug.varenummer
FROM forbrug);

Når du putter en SQL før eller efter en UNION, behøver du ikke skrive Table. Table bruges kun hvis du benytter gemte forestørgsler eller tabeller.

mvh
Thomas
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