Mikey: Zuordnung über zwei Tabellen hinweg,

ich habe zwei mysql Tabellen, in einer sind die Namen

Table1

id Namen

1 Andrea

2 Bernd

3 Carmen

4 Detlef

in der andere die Zuordnungen

Table2

paar1 paar2

1 2

1 3

4 2

ich möcht nun die Table 2 Ausgabe, aber statt den ID Nr. die Jeweiligien Namen

paar1 paar2

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

  1. 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

    1. 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
      
      1. 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

        --
        Es schimmerte ein Licht am Ende des Tunnels und es stammte von einem Flammenwerfer.
        Terry Pratchett, „Gevatter Tod“
    2. 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.

  2. 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.

  3. 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