2016-07-18 15 views
0

Ich bin neu in SQL und versuchen, Daten mit Join zu holen. Ich weiß nicht, was ich falsch mache. Ich habe zwei Tische.Join funktioniert nicht richtig


Tabelle record

recordID|activityName|userID 1 | sale | 5 2 | call | 5 3 | contact | 5

Tabelle activity

activityID|activityData|userID 1 | 50 | 5 2 | 70 | 5 3 | xyz | 5

sollte Ergebnis sein

recordID|activityName|activityData|userID 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5

Aber es gibt

recordID|activityName|activityData|userID 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5 1 | sale | 50 | 5 2 | call | 70 | 5 3 | contact | xyz | 5

SELECT * FROM tblrecord tr, tblactivity ta WHERE tr.userID = ta.userID AND tr.userID = '5'

Warum ist es das Ergebnis zu wiederholen.

PS. userID ist das einzige allgemeine Feld, die activityID und die recordID können unterschiedlich sein.

+0

Sie haben gebeten, alle Kombinationen von Aktivitäten und Datensätzen zu erhalten, die "userId = 5" entsprechen. Alle Kombinationen wären Datensatz 1 mit Aktivität 1, Datensatz 1 mit Aktivität 2, Datensatz 1 mit Aktivität 3 ... und so weiter. Wenn dies nicht das ist, was Sie brauchen, müssen Sie uns sagen, was Sie brauchen, und wir können Ihnen sagen, warum Ihre Anfrage falsch war. – apokryfos

+0

Ich möchte nur Daten von beiden Tabellen zeigen, ohne zu wiederholen –

Antwort

3

Zuerst folgen Sie einer einfachen Regel: Nie Kommas in der FROM Klausel verwenden. Immer verwenden explizite JOIN Syntax.

Zweitens scheinen Sie ein auf recordId und activityId beitreten zu wollen:

SELECT * 
FROM tblrecord tr JOIN 
    tblactivity ta 
    ON tr.userID = ta.userID AND 
     tr.recordId = ta.activityId 
WHERE tr.userID = 5; 

Auch nicht einfache Anführungszeichen verwenden, wenn der Wert wirklich eine Zahl ist.

+0

Nun, ich würde nicht mit der Regel übereinstimmen "niemals Kommas verwenden". Folgen Sie stattdessen der Regel "Wenn der Begriff * Cross-Produkt * oder * kartesisches Produkt * Ihnen unbekannt ist oder Sie wissen, dass sie nicht das sind, was Sie brauchen, verwenden Sie keine Kommas in der' FROM'-Klausel " – apokryfos

+0

Eigentlich ist die UserID die nur gemeinsames Feld. Ein Benutzer kann mehrere Datensätze haben und die activityID und die recordID können unterschiedlich sein. –

+1

@apokryfos Wenn Sie ein Cross-Produkt erstellen möchten, sollten Sie einen expliziten 'CROSS JOIN' verwenden. Kommas in der from-Klausel sind mit ANSI-92 gestorben. – Siyual

1

GROUP BY userID hinzufügen, ActivityId

auf Ihre Anfrage.