2012-03-29 13 views
0

Hier ist meine AbfrageWie diese innere zu tun Join-Abfrage in Mysql

select * from table1 inner join table2 on table1.typeId=table2.typeId; 

Dies funktioniert gut, wenn die TypeId in table2 mehr als einmal wiederholt is'nt gibt aber doppelte Zeilen, wenn TypeId mehr als einmal vorhanden ist. Gibt es eine Möglichkeit, doppelte Zeilen zu vermeiden?

table1 -- Name typeId 
      Jay 1 
      roy 2 
table2 -- Type typeId 
      L 1 
      M 1 
      N 2 
      K 2 

Expected output Jay 1 
Output getting is Jay 1 
        Jay 1 
+0

Bitte geben Datenabtastwert und dem gewünschten Ausgang. – RedFilter

+0

Wenn die gleiche 'typeid' mehrfach vorkommt, wie weiß dann die Abfrage, welcher' table1' Datensatz welchem ​​'table2' Datensatz entspricht? – ruakh

+0

Verwenden Sie Links oder Rechts Join –

Antwort

1
select DISTINCT table1.Name, table2.typeId 
from table1 inner join table2 on table1.typeId=table2.typeId; 
0

Sie müssen sich auf mehrere Spalten verbinden Doppelarbeit zu vermeiden (Wenn Ihre Zeilen identisch sind dann DISTINCT verwenden SELECT)

select * from table1 inner join table2 on table1.typeId=table2.typeId AND table1.otherId = table2.otherId; 

Fügen Sie so viele Bedingungen wie möglich beitreten, bis Sie ein einzigartiges Ergebnis. Wenn mehrere Werte Ihren Bedingungen entsprechen, kann die Datenbank nicht wissen, welche Zeile Sie auswählen möchten. Daher müssen Sie angeben, wie Sie diese einzelne Zeile in der ON-Klausel Ihres INNER JOIN auswählen möchten.

0

Unten ist ein Beispiel, wo die maximale typeid zurückgegeben wird, wenn als eine Übereinstimmung vorhanden ist:

select t1.Name, max(t1.TypeID) as TypeID 
from table1 t1 
inner join table2 t2 on t1.typeId = t2.typeId 
group by t1.Name 

Wenn Sie alle Datensätze aus Tabelle 1 auch zurück, wenn es keine Übereinstimmung in der Tabelle 2 ist, können Sie diese :

select t1.Name, max(t1.TypeID) as TypeID 
from table1 t1 
group by t1.Name