|
| Problem med query indeni query Fra : Gert Hansen |
Dato : 28-02-05 23:26 |
|
Hej.
Jeg har en "inderside" som denne:
SELECT Count(shows.day) AS NumberOfDay, shifts.workerid
FROM shows INNER JOIN shifts ON shows.shownr=shifts.shownr
WHERE (((shows.day)>=Now()))
GROUP BY shifts.workerid
Min "yderside" er at jeg vil gerne lave et right join på en tredje tabel - i
Access gøres det ved at gøre ovennævnte forespørgsel til en selvstændig
query, her givet navnet temp:
SELECT temp.*, workers.showname
FROM temp RIGHT JOIN workers ON temp.workerid=workers.workerid
ORDER BY workers.showname
Kan det lade sig gøre at lave dette med en enkelt sql sætning, så jeg ikke
skal bruge noget der kun fungerer i Access. Mit eget foreslag er (det virker
dog ikke):
SELECT Count(shows.day) AS NumberOfDay, shifts.workerid, workers.showname
FROM (shows INNER JOIN shifts ON shows.shownr=shifts.shownr) RIGHT JOIN
workers ON shifts.workerid=workers.workerid
WHERE (((shows.day)>=Now()))
GROUP BY shifts.workerid
/GertH
| |
Kristian Damm Jensen (01-03-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 01-03-05 10:31 |
|
Gert Hansen wrote:
> Hej.
>
> Jeg har en "inderside" som denne:
>
> SELECT Count(shows.day) AS NumberOfDay, shifts.workerid
> FROM shows INNER JOIN shifts ON shows.shownr=shifts.shownr
> WHERE (((shows.day)>=Now()))
> GROUP BY shifts.workerid
>
> Min "yderside" er at jeg vil gerne lave et right join på en tredje
tabel - i
> Access gøres det ved at gøre ovennævnte forespørgsel til en
selvstændig
> query, her givet navnet temp:
>
> SELECT temp.*, workers.showname
> FROM temp RIGHT JOIN workers ON temp.workerid=workers.workerid
> ORDER BY workers.showname
>
> Kan det lade sig gøre at lave dette med en enkelt sql sætning, så
jeg ikke
> skal bruge noget der kun fungerer i Access. Mit eget foreslag er (det
virker
> dog ikke):
>
> SELECT Count(shows.day) AS NumberOfDay, shifts.workerid,
workers.showname
> FROM (shows INNER JOIN shifts ON shows.shownr=shifts.shownr) RIGHT
JOIN
> workers ON shifts.workerid=workers.workerid
> WHERE (((shows.day)>=Now()))
> GROUP BY shifts.workerid
Jeg er ikke 100% sikker på standarden, men de fleste dbms'er tillader
ikke at du benytter resultatet at et inner join som den ydre del af et
ydre join. Jeg forstår egentlig ikke hvorfor, en tabel er vel en
tabel, også selvom den er derived.
Det kan man komme ud over ved at lave det indre join on til et ydre, og
derefter selv fjerne null-rækkerne:
SELECT Count(shows.day) AS NumberOfDay, shifts.workerid,
workers.showname
FROM (shows
RIGHT OUTER JOIN shifts -- outer join
ON shows.shownr=shifts.shownr
AND shows.shownr IS NOT NULL) -- men i virkeligheden indre
RIGHT JOIN workers ON shifts.workerid=workers.workerid
WHERE shows.day >= Now()
GROUP BY shifts.workerid
VH
Kristian
| |
Gert Hansen (04-03-2005)
| Kommentar Fra : Gert Hansen |
Dato : 04-03-05 10:01 |
|
>SELECT Count(shows.day) AS NumberOfDay, shifts.workerid,
>workers.showname
>FROM (shows
> RIGHT OUTER JOIN shifts -- outer join
> ON shows.shownr=shifts.shownr
> AND shows.shownr IS NOT NULL) -- men i virkeligheden indre
>RIGHT JOIN workers ON shifts.workerid=workers.workerid
>WHERE shows.day >= Now()
>GROUP BY shifts.workerid
Den mangler stadig den tredie tabel... Men jeg prøvede den, og Access
brokker sig stadig med Join type ikke understøttet. Så jeg gætter på at
Access bare ikke kan noget med subqueries.
/GertH
| |
Kristian Damm Jensen (04-03-2005)
| Kommentar Fra : Kristian Damm Jensen |
Dato : 04-03-05 10:45 |
|
Gert Hansen wrote:
> >SELECT Count(shows.day) AS NumberOfDay, shifts.workerid,
> >workers.showname
> >FROM (shows
> > RIGHT OUTER JOIN shifts -- outer join
> > ON shows.shownr=shifts.shownr
> > AND shows.shownr IS NOT NULL) -- men i virkeligheden
indre
> >RIGHT JOIN workers ON shifts.workerid=workers.workerid
> >WHERE shows.day >= Now()
> >GROUP BY shifts.workerid
>
> Den mangler stadig den tredie tabel... Men jeg prøvede den, og
Access
> brokker sig stadig med Join type ikke understøttet. Så jeg gætter
på at
> Access bare ikke kan noget med subqueries.
Du gætter forkert. Ikke alene understøttes det, jeg har lige fået
den til at autogenerere det. Men den understøtter ikke brugen af
"outer". Fjerne dette ene ord, og prøv igen.
VH
Kristian
>
> /GertH
| |
|
|