Avatar billede tbm_iceman Nybegynder
02. februar 2003 - 23:32 Der er 10 kommentarer og
1 løsning

Join af flere tabeller

Hey.

Jeg har 47 tabeller i en database som alle er ens, bortset fra titel og rækkerne der i.

#Tabel-Navn
| ID | Name | Airdate | Link | EP |

Det jeg ønsker er følgende.

Jeg vil lave en samlet SELECT hvor den samler alle 47 tabeller og kun viser de rækker som har en større(7 dage) Airdate end dagens dato. (airdate > Now()-7)
Det hele skal sorteres efter Tabellens navn.

(Til jer der vil spørge om det ikke er lettere at joine alle 47 tabeller til 1. Nej, ikke muligt.)

Hvordan gøres dette smartest?

//IceMan
Avatar billede _darkstar_ Nybegynder
02. februar 2003 - 23:36 #1
SELECT * FROM (
  SELECT * FROM tabel1
  UNION
  SELECT * FROM tabel2
  UNION
  SELECT * FROM tabel3
  ...og så videre...
  SELECT * FROM tabel47)
WHERE airdate > Now()-7

Det tyder iøvrigt på at du bør lave dit databasedesign om. 47 ens tabeller er noget af det mest gakkede, jeg længe har hørt om.
Avatar billede tbm_iceman Nybegynder
02. februar 2003 - 23:38 #2
måske har du ret angående 47 ens tabeller, men med ca. 600 rows i hver er det en god løsning, og dette er det eneste tidspunkt de skal relateres til hinanden.

Men kan ikke få UNION til at funke i Access, havde leget lidt med det før jeg skrev spørgsmålet.
Avatar billede _darkstar_ Nybegynder
02. februar 2003 - 23:47 #3
Indledningsvis: JOIN og UNION er to forskellige ting.

Dernæst: hvis der ikke er UNION i Access, bliver du nødt til at lave et script, som gør arbejdet for dig.
Avatar billede tbm_iceman Nybegynder
02. februar 2003 - 23:49 #4
damn, så skal det gøres den lange vej.
Men hvis nu jeg smider det over på en MSSQL hvor jeg ved UNION funker på, hvordan sortere jeg dem så efter Tabellens navn?
Avatar billede sjap Praktikant
03. februar 2003 - 15:14 #5
Kan du ikke lave et felt i hver tabel, der hedder det samme i alle tabellerne (det kan evt. gøres i en forespørgsel - ok det er mange gange - så slipper du for at oprette feltet permanent). I feltet indlægger du den samme værdi (nemlig tabellens navn) for alle poster i hver tabel. RIGTIGT GOD FORNØJELSE!
Avatar billede sjap Praktikant
03. februar 2003 - 15:16 #6
Hvis du gør som ovenfor, så kan du måske alligevel joine tabellerne sammen til én tabel? Eller også er der bare noget jeg har misforstået.
Avatar billede _darkstar_ Nybegynder
03. februar 2003 - 16:55 #7
superjap>>> JOIN og UNION er to foreskllige ting. Jeg tror *ikke* at det er aktuelt at bruge nogen form for JOIN her.

tbm_iceman>>> Sortering efter tabelnavn - værsgo':

SELECT * FROM (
  SELECT 'tabel1' AS tabelnavn, * FROM tabel1
  UNION
  SELECT 'tabel2' AS tabelnavn, * FROM tabel2
  UNION
  SELECT 'tabel3' AS tabelnavn, * FROM tabel3
  ...og så videre...
  SELECT 'tabel47' AS tabelnavn, * FROM tabel47)
WHERE airdate > Now()-7
ORDER BY tabelnavn
Avatar billede sjap Praktikant
03. februar 2003 - 16:58 #8
darkstar

Ok, der var en lille begrebsbøf fra min side (joine lyder jo smartere end "klaske sammen").
Avatar billede sjap Praktikant
03. februar 2003 - 17:16 #9
Har forsøgt med UNION i Access. Jeg tror nedenstående er tæt på, men kan selvfølgelig ikke vide det.

SELECT ID, AirDate, "Tabel1" AS TabelNavn FROM tabel1 WHERE AirDate >= Date()+7
UNION SELECT ID, AirDate, "Tabel2" AS TabelNavn FROM tabel2 WHERE AirDate >= Date()+7
UNION SELECT ID, AirDate, "Tabel3" AS TabelNavn FROM tabel3 WHERE AirDate >= Date()+7
UNION SELECT ID, AirDate, "Tabel4" AS TabelNavn FROM tabel4 WHERE AirDate >= Date()+7
Avatar billede tbm_iceman Nybegynder
06. februar 2003 - 19:26 #10
Det var darkstar der gav det endelige resultat.
Efter jeg konverterede til MSSQL virkede union fint, så ved man at man skal hade MS for deres lorte Access.

Sad lige og havde kæmpe problemer med at create table i access, det viser sig at access ikke følger SQL standarten... extra nice af MS at lave en standart og så kun at gennemfører den 50% :)
Kan jo så diskuteres om standarten hører hjemme i Access.

Men tillykke til darkstar.
Avatar billede _darkstar_ Nybegynder
06. februar 2003 - 21:00 #11
Tak!
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