[SQL] INNER JOIN und LIKE

hammi

Well-known member
ID: 27472
L
4 Mai 2006
175
33
Hallo,

wieder ein Problem... und diesmal haben Google und mir bekannte Progger keine Lösung gehabt...

Ich hab 2 tabellen:
TABELLE: user
id --- plz
1 --- 06184
2 --- 07381
...
und
TABELLE: umkreis

laenge --- breite --- plzs
50.1384---7.9874 --- 06184,06114,06118
gut... und jetzt formulier ich das, was ich will, mal in einem query *g*

SELECT user.id, umkreis.laenge, umkreis.breite FROM user INNER JOIN umkreis ON umkreis.plzs LIKE user.plz
kurz gesagt: es sollen die laenge und breite ausgegeben werden, die die PLZ des Users X enthalten... und das von allen usern.

ich hoffe ihr habt eine lösung...
liebe grüße,
hammi :)
 
Code:
SELECT user.id, umkreis.laenge, umkreis.breite FROM user INNER JOIN umkreis ON user.plz IN (umkreis.plzs)

So? (Nicht getestet, nur geraten) ;)

Gruß, Zera
 
Code:
SELECT user.id, umkreis.laenge, umkreis.breite FROM user INNER JOIN umkreis ON user.plz IN (umkreis.plzs)

So? (Nicht getestet, nur geraten) ;)

Gruß, Zera

hehe hatte ich auch schon, nachdem er nach 2 minuten immernoch net fertig war, hab ich dann abgebrochen ;)


Edit: bin in ner stunde wieder da...
 
hehe hatte ich auch schon, nachdem er nach 2 minuten immernoch net fertig war, hab ich dann abgebrochen ;)

Naja, wäre die Tabelle umkreis normalisiert ginge es sicher schneller. Wenn du noch in der Entwicklung steckst kannst du vielleicht sowas noch ändern? ;)

TABELLE: umkreis

umkreisId --- laenge --- breite --- plzs
4711 --- 50.1384 --- 7.9874 --- 06184
4711 --- 50.1384 --- 7.9874 --- 06114
4711 --- 50.1384 --- 7.9874 --- 06118

Ist zwar immernoch nicht in der 3. Normalform, aber wenigstens sind die Werte atomar. (Darauf sollte man wenigstens achten, denke ich.)

Gruß, Zera
 
Naja, wäre die Tabelle umkreis normalisiert ginge es sicher schneller. Wenn du noch in der Entwicklung steckst kannst du vielleicht sowas noch ändern? ;)



Ist zwar immernoch nicht in der 3. Normalform, aber wenigstens sind die Werte atomar. (Darauf sollte man wenigstens achten, denke ich.)

Gruß, Zera
das will ich gerade nicht, da die tabellen so oder so für sich laufen müssen...
aber danke für den vorschlag :)
 
Probier's mal so:
Code:
...
ON (umkreis.plzs LIKE CONCAT('%',user.plz,'%') )
...

habs eben mal auspobiet... auch hie lädt e sich tot...
vllt. ist im Query ja nen Denkfehle:

Code:
SELECT user.id, umkreis.laenge, umkreis.breite FROM umkreis INNER JOIN user ON (umkreis.plzs LIKE CONCAT('%',user.plz,'%') )
 
es geht alles irgendwie aber ich persönlich würde tabellen struktur ändern so wie zerafin schon meinte..
man muss nicht alles hinpfuschen...
Ich bin etz uni und danach schau ich mir mal an.

mfg
 
Naja, man muss sich ja auch mal klarmachen, was bei einem INNER JOIN passiert. Der INNER JOIN ist semantisch und funktionell äquivalent zu einem NATURAL JOIN, was bedeutet, dass jede Zeile von Tabelle A mit jeder Zeile von Tabelle B verknüpft wird - sprich: das kartesische Produkt beider Tabellen wird erzeugt. Das macht bei einer Tabellengröße von m Zeilen von Tabelle A und n Zeilen von Tabelle B ein Ergebnis von n*m Zeilen, was durchaus ein Weilchen dauern kann.

Eventuell bist Du mit einem LEFT JOIN besser bedient.

Obwohl ich persönlich auch zu der atomaren Speicherung raten würde, da diese wesentlich effizienter wäre, aber das wurde hier ja nun schon oft genug gesagt. *g*