whine: JOIN mit char-Feldern

Hallo zusammen,

ich möchte 2 vorhandene Tabellen in Postgresql verknüpfen:

SELECT  
TAB_A.NR,  
TAB_A.ORT,  
TAB_B.NR,  
TAB_B.WERT  
  
FROM TAB_A JOIN TAB_B ON TAB_A.NR = TAB_B.NR;

Syntaktisch scheinbar richtig (pgAdmin zeigt mir ein "erfolgreich mit xy ms"), nur die Ausgabe liefert mir 0 Zeilen. Wenn ich die Tabellen einzeln mit SELECT auf eine bestimmt NR abfrage, bekomme ich Ergebnisse. Liegt es daran, dass NR (notgedrungen) vom Typ "char varying 254*" ist

Gruß
whine

Warum eigentlich 254 und nicht 255?

  1. Ok, es lag tatsächlich am char varying. Auf varchar(100) geändert geht es.
    Nun habe ich ein anderes Problem:

      
     SELECT  v.wert, txg.mon_name, txg.mon_nr, v.unit, v.mon_nummer,  
       FROM sal_tbl  
       LEFT JOIN mess_tbl txg ON (v.mon_nummer = txg.mon_nr);  
    
    

    liefert mir eine Tabelle mit LEFT JOIN alles aus der Tabelle sal_tbl und mit RIGHT JOIN alles aus der mess_tbl. Ich möchte aber beide Seiten.
    Nur mit JOIN kommen 0 Zeilen...

    whine

    1. Hallo,

      SELECT  v.wert, txg.mon_name, txg.mon_nr, v.unit, v.mon_nummer,
         FROM sal_tbl
         LEFT JOIN mess_tbl txg ON (v.mon_nummer = txg.mon_nr);

      
      >   
      > liefert mir eine Tabelle mit LEFT JOIN alles aus der Tabelle sal\_tbl und mit RIGHT JOIN alles aus der mess\_tbl. Ich möchte aber beide Seiten.  
        
      Du suchst also den [FULL OUTER JOIN](http://www.postgresql.org/docs/9.0/interactive/sql-select.html), wenn ich Dich richtig verstehe. PostgreSQL kennt diesen Join-Typ. Wenn der Server nicht gerade defekt wäre, würde ich Dir Rouven Thimms Join-Artikel verlinken, der auch diese etwas seltenere Join-Art erläutert.  
        
        
      Freundliche Grüße  
        
      Vinzenz
      
      1. Du suchst also den FULL OUTER JOIN, wenn ich Dich richtig verstehe. PostgreSQL kennt diesen Join-Typ. Wenn der Server nicht gerade defekt wäre, würde ich Dir Rouven Thimms Join-Artikel verlinken, der auch diese etwas seltenere Join-Art erläutert.

        Freundliche Grüße

        Vinzenz

        Hmm, nein eigentlich ein LEFT JOIN

        SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;

        Viele Grüße
        whine

        1. Hallo,

          Du suchst also den FULL OUTER JOIN, wenn ich Dich richtig verstehe.

          Hmm, nein eigentlich ein LEFT JOIN

          SELECT * FROM t1 LEFT JOIN t2 ON t1.num = t2.num;

          das verstehe ich nicht. Du widersprichst Dir doch selbst:

          liefert mir eine Tabelle mit LEFT JOIN alles aus der Tabelle sal_tbl und mit RIGHT JOIN alles aus der mess_tbl. Ich möchte aber beide Seiten.

          Ich verstehe den letzten Satz so:
          Du möchtest alle Datensätze aus Tabelle sal_tbl, auch wenn es keine Entsprechungen in der Tabelle mess_tbl gibt und auch alle Datensätze aus mess_tbl, auch wenn es keine Entsprechungen in sal_tbl gibt => das genau liefert der FULL OUTER JOIN.

          Falls ich Dich nicht richtig verstanden habe, könntest Du bitte einfach an Beispieldaten (zwei, drei Datensätze je Tabelle genügen) das gewünschte Abfrageresultat zeigen.

          Freundliche Grüße

          Vinzenz

          1. Hallo,

            Du suchst also den FULL OUTER JOIN, wenn ich Dich richtig verstehe.

            das verstehe ich nicht. Du widersprichst Dir doch selbst:

            liefert mir eine Tabelle mit LEFT JOIN alles aus der Tabelle sal_tbl und mit RIGHT JOIN alles aus der mess_tbl. Ich möchte aber beide Seiten.

            Ich verstehe den letzten Satz so:
            Du möchtest alle Datensätze aus Tabelle sal_tbl, auch wenn es keine Entsprechungen in der Tabelle mess_tbl gibt und auch alle Datensätze aus mess_tbl, auch wenn es keine Entsprechungen in sal_tbl gibt => das genau liefert der FULL OUTER JOIN.

            Falls ich Dich nicht richtig verstanden habe, könntest Du bitte einfach an Beispieldaten (zwei, drei Datensätze je Tabelle genügen) das gewünschte Abfrageresultat zeigen.

            Freundliche Grüße

            Vinzenz

            Nein, ich möchte wirklich ein LEFT JOIN und nu weiß ich Rind Dank deines FULL OUTER JOIN Hinweises auch, wo mein Fehler lag. Durch Datenkonvertierung habe ich versucht, sowas zu verknüpfen: '100014" = '0100014' *fluch
            Vielen Dank, ich hätte es ohne Dich nicht gesehen!

            VG whine