Frage zu Outer Join

Frage zu Outer Join

am 23.01.2007 16:48:39 von Klaus Herzberg

Hallo,
ich habe eine Abfrage, die mit alle Firmen liefert, die ein
Referenzobjekt haben, sortiert nach der Anzahl der Referenzobjekte:

SELECT t1.id, COUNT( t2.id ) AS numbers
FROM company_new t1
INNER JOIN companyreference t2 ON t1.id = t2.companyid
GROUP BY t1.id
ORDER BY numbers DESC

Nun moechte ich aber nicht nur doe Firmen haben, die Referenzobjekte
besitzen, sondern alle. Aber wieder sortiert nach der Anzahl der
Referenzobjekte. Mein Wissen (?) anwendend habe ich einen LEFT OUTER
JOIN verwendet:

SELECT t1.id, COUNT( t2.id ) AS numbers
FROM company_new t1
LEFT OUTER JOIN companyreference t2 ON t1.id = t2.companyid
GROUP BY t1.id
ORDER BY numbers DESC

Problem: Dauert sehr sehr lange.
Wie kann ich es eventuell anders loesen.

Zusatzfrage: MySQL benoetigt bei Verwendung von COUNT() immer ein GROUP
BY. Wie oben ersichtlicht, verwende ich es eigentlich unnuetz. Wie
sollte die Abfrage besser lauten?

Vielen Dank. mfg. klaus.

Re: Frage zu Outer Join

am 23.01.2007 17:12:27 von Robert Klemme

On 23.01.2007 16:48, Klaus Herzberg wrote:
> Hallo,
> ich habe eine Abfrage, die mit alle Firmen liefert, die ein
> Referenzobjekt haben, sortiert nach der Anzahl der Referenzobjekte:
>
> SELECT t1.id, COUNT( t2.id ) AS numbers
> FROM company_new t1
> INNER JOIN companyreference t2 ON t1.id = t2.companyid
> GROUP BY t1.id
> ORDER BY numbers DESC
>
> Nun moechte ich aber nicht nur doe Firmen haben, die Referenzobjekte
> besitzen, sondern alle. Aber wieder sortiert nach der Anzahl der
> Referenzobjekte. Mein Wissen (?) anwendend habe ich einen LEFT OUTER
> JOIN verwendet:
>
> SELECT t1.id, COUNT( t2.id ) AS numbers
> FROM company_new t1
> LEFT OUTER JOIN companyreference t2 ON t1.id = t2.companyid
> GROUP BY t1.id
> ORDER BY numbers DESC
>
> Problem: Dauert sehr sehr lange.
> Wie kann ich es eventuell anders loesen.

Vielleicht muss du ja einen Index anlegen? Wie sieht den die DDL aus?

Ungetested und ich weiß auch nicht, ob deine MySQL-Version das unterstützt:

SELECT t1.id, COUNT( t2.id ) AS numbers
FROM company_new t1
INNER JOIN companyreference t2 ON t1.id = t2.companyid
GROUP BY t1.id
ORDER BY numbers DESC

UNION ALL

SELECT DISTINCT t1.id, 0 as numbers
FROM company_new t1
WHERE NOT EXISTS ( SELECT *
FROM companyreference t2
WHERE t1.id = t2.companyid )

> Zusatzfrage: MySQL benoetigt bei Verwendung von COUNT() immer ein GROUP
> BY. Wie oben ersichtlicht, verwende ich es eigentlich unnuetz. Wie
> sollte die Abfrage besser lauten?

Das GROUP BY wirst du nicht los, macht auch Sinn, wenn man mal etwas
darüber nachdenkt. :-)

Ciao

robert

Re: Frage zu Outer Join

am 23.01.2007 17:22:56 von Klaus Herzberg

Hallo,

Robert Klemme wrote:
> Ungetested und ich weiß auch nicht, ob deine MySQL-Version das unterstützt:
das ist ein Problem,

> SELECT t1.id, COUNT( t2.id ) AS numbers
> FROM company_new t1
> INNER JOIN companyreference t2 ON t1.id = t2.companyid
> GROUP BY t1.id
> ORDER BY numbers DESC
>
> UNION ALL
>
> SELECT DISTINCT t1.id, 0 as numbers
> FROM company_new t1
> WHERE NOT EXISTS ( SELECT *
> FROM companyreference t2
> WHERE t1.id = t2.companyid )

da ich mit MySQL 3.x arbeiten muss.

Aber vielen Dank fuer die Idee.

mfg. klaus.

Re: Frage zu Outer Join

am 23.01.2007 17:55:58 von Kai Ruhnau

Klaus Herzberg wrote:
> da ich mit MySQL 3.x arbeiten muss.

Ändere das, dringend!

Grüße
Kai

--
This signature is left as an exercise for the reader.

Re: Frage zu Outer Join

am 23.01.2007 18:37:52 von Andreas Kretschmer

Andreas
--
q: why do so many people take an instant dislike to mysql?
a: it saves time (oicu in #postgresql)
Explaining the concept of referential integrity to a mysql user is like
explaining condoms to a catholic (Shadda in #postgresql)

Re: Frage zu Outer Join

am 24.01.2007 11:28:15 von Klaus Herzberg

Kai Ruhnau wrote:
> Klaus Herzberg wrote:
>> da ich mit MySQL 3.x arbeiten muss.
>
> Ändere das, dringend!
das kling ja so, als waere es etwas ganz schlimmes. Es gibt eben
Anwendungen, die seit Jahren erfolgreich laufen und eine Migration
Arbeit macht.

mfg. klaus.

Re: Frage zu Outer Join

am 24.01.2007 11:35:12 von Andreas Kretschmer

Andreas
--
Andreas Kretschmer
Linux - weil ich es mir wert bin!
GnuPG-ID 0x3FFF606C http://wwwkeys.de.pgp.net
Deutsche PostgreSQL User Group: http://pgug.de

Re: Frage zu Outer Join

am 24.01.2007 11:37:57 von Claus Reibenstein

Klaus Herzberg schrieb:

> Kai Ruhnau wrote:
>
>> Klaus Herzberg wrote:
>>
>>> da ich mit MySQL 3.x arbeiten muss.
>>
>> Ändere das, dringend!
>
> das kling ja so, als waere es etwas ganz schlimmes. Es gibt eben
> Anwendungen, die seit Jahren erfolgreich laufen und eine Migration
> Arbeit macht.

Das ist eine gefährliche, ja, ich möchte fast sagen, fahrlässige
Einstellung. Das geht so lange gut, bis irgendwann migriert werden
_muss_ - und keiner mehr da ist, der diesen alten Code noch versteht.
Dann wird's richtig aufwendig und teuer.

Ich kann mich noch gut an die Millennium-Panik erinnern, als plötzlich
händeringend nach COBOL-Programmierern gesucht wurde. Sogar mir hat man
damals ein entsprechendes Angebot gemacht, nur weil in einem meiner
Zeugnisse diese Sprache genannt wird, allerdings in einem gänzlich
anderen Zusammenhang.

Gruß. Claus
--
,~°O O
O ,´ / |/|\
/ |¯`. Das neue Hochzeits-Branchenbuch im Internet ,´ / | |\
/__| `~...............................................~´ /___|/ /