phpbar.de logo

Mailinglisten-Archive

AW: AW: Joins auf die gleiche tabelle

AW: AW: Joins auf die gleiche tabelle

Nikolas Hagelstein mysql-de_(at)_lists.bttr.org
Thu, 22 Nov 2001 13:28:38 +0100


This is a multi-part message in MIME format.

------=_NextPart_000_0011_01C17359.982C2CC0
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Hi,

 

> zeig uns doch mal den Aufbau deiner Tabelle und ein paar Testdaten,
> dann muessen wir nicht ins Blaue hinein raten.
ok hier :



------=_NextPart_000_0011_01C17359.982C2CC0
Content-Type: text/plain;
	name="selfjoin.txt"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
	filename="selfjoin.txt"


Tabelle (mitglieder) mit mannlichen Migliedern eines Vereins.
Zumeist Vater und S=F6hne:
_______________________________
|name  |vorn |strasse  |status|
|______|_____|_________|______|
|Peters|Klaus|Forstweg |Vater |
|------+-----+---------+------|
|Peters|Sven |Forstweg |Sohn  |
|------+-----+---------+------|
|Hansen|Peter|Baumallee|Vater |
|------+-----+---------+------|
|Hansen|Udo  |Baumallee|Sohn  |
|------+-----+---------+------|
|Hansen|Sepp |Baumallee|Sohn  |
|------+-----+---------+------|
|Jahnke|Kurt |Dorfallee|Vater |
|------+-----+---------+------|
|Volmer|Hans |Krausestr|Sohn  |
|------+-----+---------+------|
|Kuehne|Joern|Krausestr|Vater |
|------+-----+---------+------|

Es soll jedem Vater seine Soehne zugeordnet werden.
V=E4ter ohne S=F6hne werden aufgelistet.
S=F6hne ohne Vater werden NICHT aufgelistet.

Ergebnis soll in etwa so aussehen:
___________________________________
|name  |vorn |strasse  |soehne    |
|______|_____|_________|__________|
|Peters|Klaus|Forstweg |Sven      |
|------+-----+---------+----------|
|Hansen|Peter|Baumallee|Udo, Sepp |
|------+-----+---------+----------|
|Jahnke|Kurt |Dorfallee|          |
|------+-----+---------+----------|
|Kuehne|Joern|Krausestr|          |
|------+-----+---------+----------|

Folgendes Statement dauert ewig (ca. 2400 Datensa=E4tze) und produziert =
nat=FCrlich f=FCr jede Beziehung eine neue Zeile:

SELECT
a.name as name,
a.vorname as vorn,
a.strasse as strasse,
b.vorname as sohn
FROM
mitglieder a
LEFT JOIN
mitglieder b
ON
(a.name=3Db.name)
AND
(a.strasse=3Db.strasse)
AND
(b.status like 'Sohn')
WHERE
(a.status =3D 'Vater')=20

___________________________________
|name  |vorn |strasse  |sohn      |
|______|_____|_________|__________|
|Peters|Klaus|Forstweg |Sven      |
|------+-----+---------+----------|
|Hansen|Peter|Baumallee|Udo       |
|------+-----+---------+----------|
|Hansen|Peter|Baumallee|Sepp      |
|------+-----+---------+----------|
|Jahnke|Kurt |Dorfallee|NULL      |
|------+-----+---------+----------|
|Kuehne|Joern|Krausestr|NULL      |
|------+-----+---------+----------|



Zum testen:

CREATE TABLE mitglieder (
  name char(20) NOT NULL default '',
  vorname char(20) NOT NULL default '',
  strasse char(20) NOT NULL default '',
  status char(20) NOT NULL default ''
) TYPE=3DMyISAM;

INSERT INTO mitglieder VALUES ('Peters', 'Klaus', 'Forstweg', 'Vater');
INSERT INTO mitglieder VALUES ('Peters', 'Sven', 'Forstweg', 'Sohn');
INSERT INTO mitglieder VALUES ('Hansen', 'Peter', 'Baumallee', 'Vater');
INSERT INTO mitglieder VALUES ('Hansen', 'Udo', 'Baumallee', 'Sohn');
INSERT INTO mitglieder VALUES ('Hansen', 'Sepp', 'Baumallee', 'Sohn');
INSERT INTO mitglieder VALUES ('Jahnke', 'Kurt', 'Dorfallee', 'Vater');
INSERT INTO mitglieder VALUES ('Volmer', 'Hans', 'Krausestr', 'Sohn');
INSERT INTO mitglieder VALUES ('Kuehne', 'Joern', 'Krausestr', 'Vater');
------=_NextPart_000_0011_01C17359.982C2CC0--

---
!!NEU!!
Fragen und Antworten zu MySQL und dieser Liste unter
-->>  http://www.4t2.com/mysql 



php::bar PHP Wiki   -   Listenarchive