2011-01-05 11 views
0

meine erste Tabelle hat über 18K AufzeichnungenHilfe mit Joins

so, wenn ich

select * from table2 i über 18k bekommen

Ich versuche, eine auf es zu tun kommen wie folgt, aber ich bin wie 26K zurück zu bekommen .. was mache ich falsch? i obwohl es sollte all die „richtigen“ aka table2 Aufzeichnungen zurückzukehren und mir zeigen, was Wert aus dem ersten Match in einer separaten Spalte ...

Select t1.fID , t2.* 
FROM table1 t1 right join table2 t2 on t1.fName = t2.f 

hier ein exmaple meiner Tabellen ist:

Tabelle 1: fID, fName

Tabelle 2: id, f, Adresse, usw.

ich brauche alle Datensätze aus Tabelle 2 mit einer fID Säule zu erhalten, wann immer f = fName

+0

@Gerrat, ich brauche nur die 18K aus Tabelle 2, mit einer passenden Spalte aus Tabelle 1, wenn es eine gibt. –

+0

im Grunde, Tabelle 2 hat Namen, Tabelle 1 hat Namen und IDs, ich brauche alles aus Tabelle 2 zu bekommen, sondern auch eine passende ID neben dem Namen .... wenn es einen gibt –

+0

wenn die IDs sind unterschiedlich, Sie können nur wählen, klar, sonst müssen Sie entscheiden, welche ID Sie wollen – Gerrat

Antwort

3

table1 hat viele Zeilen mit einem Wert von fname, der mit dem in Tabelle2 übereinstimmt.

Beispiel, sagen 5k Reihen table2 keine passenden Zeilen in Tabelle 1 haben Sie durchschnittlich 2 Zeilen in der Tabelle haben 1 für jede der verbleibenden 13k table2 Reihen

Weil Sie auch für eine Spalte für tabelle1 gefragt haben, das wird passieren. Sie werden mehrere t1.fId-Werte für einen bestimmten t2.fname notieren. Oder NULL

+0

so , wie würde ich gehen alle Datensätze aus Tabelle 2, mit einer übereinstimmenden Spalte aus Tabelle 1, wenn es einen gibt .. –

+0

@ Xrum ... welche übereinstimmende Zeile möchten Sie die Spalte anzeigen von ... wie gbn erklärt, gibt es mehrere übereinstimmende Zeilen. – Gerrat

+0

@xrum: Sie bekommen das. Sie können die Zeilen nicht reduzieren, es sei denn, Sie 1. Aggregieren und nehmen Sie vielleicht die MIN (t1.fId) oder 2. Entscheiden Sie nicht, t1 zu haben.fid überhaupt – gbn

0

Das Schlüsselwort RIGHT JOIN Gibt alle Zeilen aus der rechten Tabelle (table_name2) zurück, auch wenn keine Übereinstimmungen in der linken Tabelle (table_name1) vorhanden sind. See Right Join

So sieht es aus, als ob Sie nicht Ihre übereinstimmenden Kriterien richtig eingestellt haben, oder Sie haben keine Übereinstimmungen.

+0

aber warum bekomme ich mehr Datensätze mit der richtigen Join? –

+0

Weil Right Join alle Datensätze aus der richtigen Tabelle unabhängig davon, ob oder nicht Atch existiert. – Eppz

0

Dies ist möglich, wenn einige fName Werte wiederholt werden in Tabelle 2 und/oder Tabelle 1

diese Abfragen ausführen und anzeigen:

SELECT fName, COUNT(1) FROM Table2 GROUP BY fName HAVING COUNT(1) > 1 

SELECT fName, COUNT(1) FROM Table1 GROUP BY fName HAVING COUNT(1) > 1 
+1

FYI, COUNT (1) fügt keinen Nutzen hinzu ... http://StackOverflow.com/Questions/1221559/count-VS-count1/1221649#1221649 – gbn

+0

Ich möchte nicht noch einmal starten :) .. ich gerade folge ihm als Übung und ich erwarte nicht, dass es besser funktioniert als COUNT (*) – Chandu

+0

Gut genug, da du das Ergebnis kennst ... – gbn

2

Wenn t1.fName und t2.f nicht eindeutig zuzuordnen sind Bezeichner für ihre Tabellen werden Sie feststellen, dass Zeilen aus Tabelle1 mit mehreren Zeilen aus Tabelle2 verknüpft werden.

+0

du hast Recht t2.f ist nicht einzigartig ... –