Keine Unterabfragen in der FROM-Klausel einer View-Definition erlaubt - Was tun?

Keine Unterabfragen in der FROM-Klausel einer View-Definition erlaubt - Was tun?

am 01.05.2007 23:23:52 von christoph lauterbach

Hallo Gruppe,

ich habe mir einen Query gebastelt, mit dem ich ein Nested Set so
auslesen kann, dass es mit einer einzigen Schleife vom Client
auslesbar ist. Jetzt wollte ich dieses Trum als View ablegen, da sagt
im MySQL dass man keine Unterabfragen in der FROM-Klausel einer View-
Definition haben darf. Hier aber erstmal Tabelle (vereinfacht) und
Query:

Tabelle 'categories':
+----+-------------------------+---------------+------------ -+
| id | name | startBoundary | endBoundary |
+----+-------------------------+---------------+------------ -+
| 0 | __Root__ | 1 | 36 |
| 2 | Fotografie | 18 | 19 |
| 3 | Baukunst | 16 | 17 |
| .. | ... | ... | ... |
+----+-------------------------+---------------+------------ -+

"Baum-Query":

SELECT `categories`.`id` AS `id`,
`categories`.`name` AS `name`,
`categories`.`startBoundary` AS `startBoundary`,
`father2`.`id` AS `fatherId`,
`categories`.`fatherStartBoundary` AS `fatherStartBoundary`
FROM (SELECT `categories`.`id` AS `id`,
`categories`.`name` AS `name`,
`categories`.`startBoundary` AS `startBoundary`,
max(`father1`.`startBoundary`) AS `fatherStartBoundary`
FROM `categories`,
`categories` `father1`
WHERE (`categories`.`startBoundary` BETWEEN
(`father1`.`startBoundary` + 1) AND (`father1`.`endBoundary` - 1))
GROUP BY `categories`.`id`) `categories`,
`categories` `father2`
WHERE (`categories`.`fatherStartBoundary` =3D
`father2`.`startBoundary`)
ORDER BY `categories`.`startBoundary`;

Das Ergebnis dieses Queries:
+----+-------------------------+---------------+----------
+---------------------+
| id | name | startBoundary | fatherId |
fatherStartBoundary |
+----+-------------------------+---------------+----------
+---------------------+
| 16 | Geisteswissenschaft | 2 | 0
| 1 |
| 11 | Philosophie | 5 | 16
| 2 |
| .. | ... | ... | ...
| ... |
+----+-------------------------+---------------+----------
+---------------------+

Die Spalte "fatherStartBoundary" auszugeben, könnte ich mir natürlich
sparen, das ist sozusagen das noch stehende Baugerüst.

Also hier endlich die Frage: Wie lässt sich ein solcher Query
umschreiben, so dass kein Subselect im FROM-Teil nötig ist? Ein
Konstrukt wie
[..]
WHERE [...] AND `father2`.`startBoundary` =3D `father1`.`startBoundary`
[..]
bringt bei Verwendung von Gruppierung und MAX() ja nichts.

Vielen Dank
Christoph Lauterbach

Re: Keine Unterabfragen in der FROM-Klausel einer View-Definitionerlaubt - Was tun?

am 04.05.2007 15:10:41 von thborsdorf

christoph lauterbach schrieb am 01.05.2007 23:23:
> Also hier endlich die Frage: Wie lässt sich ein solcher Query
> umschreiben, so dass kein Subselect im FROM-Teil nötig ist?

Hast du mal zwei Views probiert? Also den inneren Select als View
ablegen, die dann der äußere Select abfragt?

> Christoph Lauterbach

MfG Thomas.

Re: Keine Unterabfragen in der FROM-Klausel einer View-Definition erlaubt - Was tun?

am 06.05.2007 17:56:01 von christoph lauterbach

On 4 Mai, 15:10, "Borsdorf, Thomas" wrote:
> christoph lauterbach schrieb am 01.05.2007 23:23:
>
> > Also hier endlich die Frage: Wie lässt sich ein solcher Query
> > umschreiben, so dass kein Subselect im FROM-Teil nötig ist?
>
> Hast du mal zwei Views probiert? Also den inneren Select als View
> ablegen, die dann der äußere Select abfragt?

Das ist eine gute Idee, werde ich gleich mal probieren.

Vielen Dank
Christoph