Join-Problem

Join-Problem

am 19.01.2006 02:22:14 von Rudi Klingenberg

Hallo Ng,

ich komme einfach nicht darauf wie ich folgendes Problem
löse:

Tabelle A (languages):

lang_id | lang
1 | deutsch
2 | english
3 | hrvatski
usw.

Tabelle B (countries):

country_id | language_id | country
1 | 1 | Deutschland
1 | 2 | Germany
2 | 1 | Kroatien
2 | 2 | Croatia
2 | 3 | Hrvatska

Nun möchte ich das Land ausgewählt haben welches noch einer
Sprachzuodnung fehlt, also Deutschland in kroatischer
Sprache. Ich dachte da an

"select country_id from country left join language on
(language.language_id != country.language_id)" aber leider
bekomme ich da mehr Ergebnisse zurück als ich erwartet habe.
Hat vielleicht jemand von euch eine Idee? Ich stehe
irgendwie total auf dem Schlauch.

Mfg Rudi

Re: Join-Problem

am 19.01.2006 08:12:28 von Stefan Rybacki

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Rudi Klingenberg wrote:
> Hallo Ng,
Hi

>...
> "select country_id from country left join language on
> (language.language_id != country.language_id)" aber leider
> bekomme ich da mehr Ergebnisse zurück als ich erwartet habe.
> Hat vielleicht jemand von euch eine Idee? Ich stehe
> irgendwie total auf dem Schlauch.
>

Ad-hoc für MySQL 4.1 und höher:

SELECT country_id, country FROM countries GROUP BY country_id HAVING
count(*)<(SELECT count(*) FROM languages)

Bis denn dann
Stefan

> Mfg Rudi
>

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1rc2 (MingW32)

iD8DBQFDzzvbyeCLzp/JKjARAnvkAKC8E0GwEN7xE2PnGXcxojpydW0rnQCf Zopw
nVG5TXKdeLVhPqxMAfratNE=
=6i4M
-----END PGP SIGNATURE-----

Re: Join-Problem

am 23.01.2006 10:11:42 von Dominik Echterbruch

Stefan Rybacki wrote:
>>...
>>"select country_id from country left join language on
>>(language.language_id != country.language_id)" aber leider
>>bekomme ich da mehr Ergebnisse zurück als ich erwartet habe.
>>Hat vielleicht jemand von euch eine Idee? Ich stehe
>>irgendwie total auf dem Schlauch.
>
> Ad-hoc für MySQL 4.1 und höher:

Und etwas verständlicher und für alle anderen Umgebungen funktionabel:

SELECT c.country_id, c.country
FROM countries c
LEFT JOIN languages l ON l.lang_id = c.language_id
WHERE l.lang_id IS NULL


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786

Re: Join-Problem

am 23.01.2006 23:25:48 von Stefan Rybacki

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dominik Echterbruch schrieb:
> Stefan Rybacki wrote:
>>> ...
>>> "select country_id from country left join language on
>>> (language.language_id != country.language_id)" aber leider
>>> bekomme ich da mehr Ergebnisse zurück als ich erwartet habe.
>>> Hat vielleicht jemand von euch eine Idee? Ich stehe
>>> irgendwie total auf dem Schlauch.
>>
>> Ad-hoc für MySQL 4.1 und höher:
>
> Und etwas verständlicher und für alle anderen Umgebungen funktionabel:
>
> SELECT c.country_id, c.country
> FROM countries c
> LEFT JOIN languages l ON l.lang_id = c.language_id
> WHERE l.lang_id IS NULL

Hast du das auch ausprobiert? Kann gerade nicht verstehen, wie das
funktionieren soll. D.h. wann wird l.lang_id null, wenn du doch von
countries ausgehst und eigentlich andersherum suchst.

Beispiel des OPs:

country_id | language_id | country
1 | 1 | Deutschland
1 | 2 | Germany
2 | 1 | Kroatien
2 | 2 | Croatia
2 | 3 | Hrvatska

lang_id | lang
1 | deutsch
2 | english
3 | hrvatski

Nun deine Abfrage darauf soll folgendes liefern: (im Kopf getestet)

country_id | country
1 Deutschland
1 Germany
2 Kroatien
2 Croatia
2 Hrvatska

Also kein Gewinn.

Bis denn dann
Stefan

>
>
> Grüße,
> Dominik

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.2 (MingW32)

iD8DBQFD1VfsyeCLzp/JKjARAgiSAJ4tpJPd2jtzCVUjvXQjPYpDuYmDMACe PN5h
rmA/qrgRaFor5WhfqFiSlCI=
=pxp3
-----END PGP SIGNATURE-----

Re: Join-Problem

am 24.01.2006 11:37:12 von Dominik Echterbruch

Stefan Rybacki wrote:
>>>>...
>>>>"select country_id from country left join language on
>>>>(language.language_id != country.language_id)" aber leider
>>>>bekomme ich da mehr Ergebnisse zurück als ich erwartet habe.
>>>>Hat vielleicht jemand von euch eine Idee? Ich stehe
>>>>irgendwie total auf dem Schlauch.
>>>
>>>Ad-hoc für MySQL 4.1 und höher:
>>
>>Und etwas verständlicher und für alle anderen Umgebungen funktionabel:
>>
>>SELECT c.country_id, c.country
>>FROM countries c
>>LEFT JOIN languages l ON l.lang_id = c.language_id
>>WHERE l.lang_id IS NULL
>
> Hast du das auch ausprobiert?

Ich habe es tatsächlich nicht ausprobiert und hätte es wohl tun sollen.
Dann wäre mir nämlich aufgefallen, daß mein Ansatz zwar gut, aber leider
falsch gedacht ist :)

Durch die spezielle Konstellation bleibt vermutlich wirklich nicht viel
mehr, als dein Vorschlag. Mit einem LEFT JOIN wie oben kommt man
jedenfalls nicht weit. Auch nicht, wenn man die Tabellen vertauscht
(dann hätte man zwar genau die gesuchten Datensätze, aber es fehlen die
im OP gewünschten Ländernamen).


Grüße,
Dominik
--
MonstersGame - Die Schlacht zwischen Vampiren und Werwölfen
http://spielwelt6.monstersgame.net/?ac=vid&vid=3018786