Zuordnung über zwei Tabellen hinweg,
Mikey
- datenbank
- mysql
ich habe zwei mysql Tabellen, in einer sind die Namen
Table1
1 Andrea
2 Bernd
3 Carmen
4 Detlef
in der andere die Zuordnungen
Table2
1 2
1 3
4 2
ich möcht nun die Table 2 Ausgabe, aber statt den ID Nr. die Jeweiligien Namen
Andreas Bernd
Andreas Carmen
Detlef Bernd
Ich brauche also irgendwie ein Brücke zu der ersten Tabelle:
"select paar1, paar2 FROM Table2"
So bekomme ich die Zeilen angezeigt, aber wie bekomme ich die dazugehörigen Namen in diese Formel?
Mikey
Hallo,
du musst die PaarTabelle durcharbeiten und zu jedem der beiden Felder eine Namen-Tabelle (die also zweimal) zuordnen:
SELECT
nam1.Namen
,nam2.Namen
FROM Table2 par1 # Paar-Beziehung
,Table1 nam1 # Mitglied 1 des Paares
,Table1 nam2 # Mitglied 2 des Paares
WHERE mam1.id = par1.paar1
AND nam2.id = par1.paar2
Nicht getestet, aber so das Prinzip.
Linuchs
ist ja grausam, wie der Quelltext dargestellt wird. Woran liegt's?
Hier Quelltext ohne vorangestellte Leerzeile
Hier Quelltext mit vorangestellter Leerzeile
SELECT
nam1.Namen
,nam2.Namen
FROM Table2 par1 # Paar-Beziehung
,Table1 nam1 # Mitglied 1 des Paares
,Table1 nam2 # Mitglied 2 des Paares
WHERE mam1.id = par1.paar1
AND nam2.id = par1.paar2
Hallo
ist ja grausam, wie der Quelltext dargestellt wird. Woran liegt's?
Daran, dass – wie hier schon unzählige Male kundgetan – Blockelemente in der Kramdown-Syntax erst durch Leerzeilen vor und hinter ihnen zu Blockelementen werden.
Tschö, Auge
Tach!
du musst die PaarTabelle durcharbeiten und zu jedem der beiden Felder eine Namen-Tabelle (die also zweimal) zuordnen:
Nicht getestet, aber so das Prinzip.
Das ist nur kein besonders gutes Prinzip. Es geht einen Umweg über zwei Joins. (Correlated) Subquerys zeigen in diesem Fall auf direktem Weg, was das gewünschte Ergebnis ist.
dedlfix.
Tach!
ich möcht nun die Table 2 Ausgabe, aber statt den ID Nr. die Jeweiligien Namen
"select paar1, paar2 FROM Table2"
So bekomme ich die Zeilen angezeigt, aber wie bekomme ich die dazugehörigen Namen in diese Formel?
Subselects sind eine Möglichkeit. Statt paar1 und paar2 schreibst du je ein Select, dass den Namen zu dieser ID ergibt.
dedlfix.
Moin!
Das Problem ist, dass Du die eine Tabelle 2 Mal fragen musst. Das macht die Zuordnung von Aliasen notwendig.
Meine Lösung:
Tabelle pNamen:
CREATE TABLE IF NOT EXISTS `pNamen` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
INSERT INTO `pNamen` (`id`, `name`) VALUES
(1, 'Andrea'),
(2, 'Bernd'),
(3, 'Carmen'),
(4, 'Detlev');
Tabelle pPaare:
CREATE TABLE IF NOT EXISTS `pPaare` (
`p1` int(11) NOT NULL,
`p2` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `pPaare` (`p1`, `p2`) VALUES
(1, 2),
(1, 3),
(4, 2);
Abfrage:
SELECT
`p1`,
`p2`,
`PN1`.`name` as `Partner 1`,
`PN2`.`name` as `Partner 2`
FROM
`pPaare` as `PP1`,
`pNamen` as `PN1`,
`pNamen` as `PN2`
WHERE
`PN1`.`id`=`PP1`.`p1`
AND `PN2`.`id`=`PP1`.`p2`;
Ergebnis:
+----+----+-----------+-----------+
| p1 | p2 | Partner 1 | Partner 2 |
+----+----+-----------+-----------+
| 1 | 2 | Andrea | Bernd |
| 1 | 3 | Andrea | Carmen |
| 4 | 2 | Detlev | Bernd |
+----+----+-----------+-----------+
3 rows in set (0.00 sec)
(Du kannst p1, p2 auch aus dem Select weglassen.)
Jörg Reinholz