Subquery für verknüpfte Tabellen ersetzen

Subquery für verknüpfte Tabellen ersetzen

am 01.06.2006 18:37:12 von alexx

Hallo Newsgroup,

Ich versuche seit meiner Erkenntnis das MySQL erst ab Version 4.1
Subqueries unterstützt, diese durch alternative Abfragen zu ersetzen.
Dabei raucht mir langsam der Kopf, da es mir trotz aller Recherchen
nicht gelingen will bereits gelöste Beispiele auf meinen Fall
anzuwenden. Deshalb hier mein Eintrag:

Tabelle "list" mit dem Primary Key 'id'.
Tabelle "categories" mit dem Primary Key 'cid' und 'name'.
Eine Verknüpfungstabelle "catsets" die Zuordnungen der Listeneinträge
zu (mehreren) Kategorien enthält.

Aufgabe der Query ist die Listeneinträge zu finden, deren Kategorien
das Wort "ball" enthalten.
bisherige Query:

SELECT list.id
FROM `list` AS list
WHERE

(SELECT count( cat.cid )
FROM `catsets` AS catset
INNER JOIN categories AS cat ON catset.cid =3D cat.cid
WHERE catset.id=3D list.id
AND cat.name LIKE %ball%'
) > 0


Eine Lösung durch JOIN(s) habe ich nicht hinbekommen.

Vielen Dank für die Hilfe.
Alex

Re: Subquery für verknüpfte Tabellen ersetzen

am 01.06.2006 22:45:16 von Dominik Echterbruch

alexx wrote:
> Hallo Newsgroup,
>
> Ich versuche seit meiner Erkenntnis das MySQL erst ab Version 4.1
> Subqueries unterstützt, diese durch alternative Abfragen zu ersetzen.
> Dabei raucht mir langsam der Kopf, da es mir trotz aller Recherchen
> nicht gelingen will bereits gelöste Beispiele auf meinen Fall
> anzuwenden. Deshalb hier mein Eintrag:
>
> Tabelle "list" mit dem Primary Key 'id'.
> Tabelle "categories" mit dem Primary Key 'cid' und 'name'.
> Eine Verknüpfungstabelle "catsets" die Zuordnungen der Listeneinträge
> zu (mehreren) Kategorien enthält.
>
> Aufgabe der Query ist die Listeneinträge zu finden, deren Kategorien
> das Wort "ball" enthalten.

Eventuell so?

SELECT list.id
FROM list
INNER JOIN catsets ON catsets.listid = list.id
INNER JOIN categories ON categories.cid = catsets.cid
WHERE categories.cname LIKE '%ball%';

> bisherige Query:
> SELECT list.id
> FROM `list` AS list
> WHERE
>
> (SELECT count( cat.cid )
> FROM `catsets` AS catset
> INNER JOIN categories AS cat ON catset.cid = cat.cid
> WHERE catset.id= list.id
> AND cat.name LIKE %ball%'
> ) > 0

Buah *schüttel*

> Eine Lösung durch JOIN(s) habe ich nicht hinbekommen.

Das begreife ich nicht. Du hast doch schon fast alles getan, was du tun
mußtest, um die passenden IDs zu finden. An welcher Stelle bist du denn
nicht weiter gekommen?


Grüße,
Dominik
--
Norbert Melzer in d.c.d.mysql:
F: Wie verstehe ich diese FAQ am besten?
A: Studieren Sie Datanbank-Design und lesen Sie anschliessend alles nochmal

Re: Subquery für verknüpfte Tabellen ersetzen

am 02.06.2006 13:39:28 von alexx

danke dir, funktioniert.