JOIN mit char-Feldern
whine
- datenbank
0 whine0 Vinzenz Mai0 whine0 Vinzenz Mai0 whine
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?
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
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
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
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
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