02. februar 2003 - 23:32Der 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.)
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.
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.
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?
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!
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
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
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.
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.