Hi,
ich habe eine Tabelle db1 mit (userid varchar(16), id bigint(50)) und eine db2 mit (id bigint(50), news varchar(250)).
Nun möchte ich alle Einträge aus db2 die für eine bestimmte userid noch nicht in db1 stehen.
Wie macht man das *nur* in mySQL?
Query Frage: 2 Tabellen - Differenz finden (Datensätze die nicht da sind)
-
- Posts: 1117
- Joined: 2002-09-27 00:54
- Location: Hannover
-
- Posts: 28
- Joined: 2004-11-30 08:34
- Location: Alpen
Re: Query Frage: 2 Tabellen - Differenz finden (Datensätze die nicht da sind)
Hi,Alexander Newald wrote: ich habe eine Tabelle db1 mit (userid varchar(16), id bigint(50)) und eine db2 mit (id bigint(50), news varchar(250)).
Nun möchte ich alle Einträge aus db2 die für eine bestimmte userid noch nicht in db1 stehen.
wenn ich das richtig sehe, hast Du doch garkeine Userid in deiner DB2. Falls doch, denke ich das es mit einer simpelen SQL Abfrage nicht getan ist. Da muss dann schon mit Schleifen gearbeitet werden.
Gruß Dfritz
-
- Posts: 63
- Joined: 2003-08-26 12:00
Re: Query Frage: 2 Tabellen - Differenz finden (Datensätze die nicht da sind)
also verstehen tue ich die frage noch nicht, aber vielleicht hilft dir das ja (vorausgesetzt id ist in beiden tabellen der foreign key):
SELECT * FROM db2 WHERE id NOT IN (SELECT id FROM db1 GROUP BY id)
damit erhälst du alle eintrage von db2, die keinen passenden schlüssel in db1 haben.
SELECT * FROM db2 WHERE id NOT IN (SELECT id FROM db1 GROUP BY id)
damit erhälst du alle eintrage von db2, die keinen passenden schlüssel in db1 haben.
-
- Posts: 1117
- Joined: 2002-09-27 00:54
- Location: Hannover
Re: Query Frage: 2 Tabellen - Differenz finden (Datensätze die nicht da sind)
ja, sowas habe ich gesucht
-
- Posts: 471
- Joined: 2003-08-21 10:21
- Location: Berlin
Re: Query Frage: 2 Tabellen - Differenz finden (Datensätze die nicht da sind)
Mit einem LEFT JOIN:Alexander Newald wrote:ich habe eine Tabelle db1 mit (userid varchar(16), id bigint(50)) und eine db2 mit (id bigint(50), news varchar(250)).
Nun möchte ich alle Einträge aus db2 die für eine bestimmte userid noch nicht in db1 stehen.
Wie macht man das *nur* in mySQL?
Code: Select all
select db1.userid from db1 left join db2 on db1.userid = db2.id where isnull(db2.id)
Außerdem sollte natürlich ein Index auf db1.userid und db2.id vorhanden sein, damit das schnell ist.
Hintergrund: Ein LEFT JOIN listet alle Werte aus der Tabelle 1 auf und sucht für jeden Wert aus der ON-Condition von Tabelle 1 den angegebenen passenden Wert aus Tabelle 2. Wenn kein passender Wert vorhanden ist, werden NULL-Werte generiert.
Die WHERE-Clause unterdrückt alle Werte aus Tabelle 1, für die KEIN Nullwert vorhanden ist, listet also nur die db1.userid auf, für die keine db2.id vorhanden ist.