Zum Inhalt springen

[MYSQL] Tabellen vergleichen


tobias-digital

Empfohlene Beiträge

Hiho!

Ich hoffe ihr könnt mir helfen! Ich habe 2 Tabellen mit exakt den gleichen Attributen.

Tabelle1 (name, vorname, strasse, hausnr, plz, ort)

Tabelle2 (name, vorname, strasse, hausnr, plz, ort)

Tabelle1 enthält alle Kunden, die Produkt 1 gekauft haben.

Tabelle2 enthält alle Kunden, die Produkt 2 gekauft haben.

Ein Kunde kann in beiden Tabellen vorkommen (er hat dann beide Produkte gekauft).

Ich möchte die Tabellen beiden so vergleichen, dass ich alle Kunden bekomme, die nur in Produkt 1 gekauft haben. Wie geht das?

Mein Lösungsansatz:

SELECT DISTINCT `Tabelle1`.`name`, 

                `Tabelle1`.`vorname`, 

                `Tabelle1`.`strasse`, 

                `Tabelle1`.`hausnr`,

                `Tabelle1`.`plz`,

                `Tabelle1`.`ort`

FROM Tabelle1, 

     Tabelle2

WHERE ((`Tabelle2`.`name`    != `Tabelle1`.`name`)    AND 

       (`Tabelle2`.`vorname` != `Tabelle1`.`vorname`) AND

       (`Tabelle2`.`strasse` != `Tabelle1`.`strasse`) AND 

       (`Tabelle2`.`hausnr`  != `Tabelle1`.`hausnr`)AND 

       (`Tabelle2`.`plz`     != `Tabelle1`.`plz`)AND 

       (`Tabelle2`.`ort`     != `Tabelle1`.`ort`));

Danke im Vorraus, Gruß Tobias

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi!

Leider "mißbrauche" ich MySQL dazu nur. Es handelt sich hierbei um eine einmalige Datenerhebung.

Ich habe das Problem jetzt auch gelöst. Die beiden Tabellen habe ich CSV-mäßig exportiert und in Access Tabellen importiert. Dann habe ich die Tabellen mit dem "Assistenten für Inkonsistenzsuche" Abgefragt und dass Gewünschte erreicht.

Nur interessehalber: wie würde es gehen wenn beide Tabellen eindeutige ID-Spalten hätten?

Gruß Tobias

Link zu diesem Kommentar
Auf anderen Seiten teilen

Tabelle1 (name, vorname, strasse, hausnr, plz, ort)

Tabelle2 (name, vorname, strasse, hausnr, plz, ort)

Tabelle1 enthält alle Kunden, die Produkt 1 gekauft haben.

Tabelle2 enthält alle Kunden, die Produkt 2 gekauft haben.

Also das is ja mehr als kompliziert ausserdem redundant etc. ;)

Ich würde dir folgendes vorschlagen:

Tabelle kunden (id, name, vorname, strasse, hausnr, plz, ort)

Tabelle produkte (id, bezeichnung, preis)

Tabelle posten (id, kundenid, produktid)

Also eine Tabelle für Kunden, eine für Artikel und eine für einen Kauf eines Produkts.

Alle Kunden, die nur Produkt 1 (id = 1) gekauft haben:

SELECT DISTINCT t1.id, t1.name, t1.vorname FROM kunden t1 JOIN posten t2 ON t1.id = t2.kundenid AND t2.kundenid NOT IN (SELECT DISTINCT kundenid FROM posten WHERE produktid <> 1)

Müsste so eigentlich gehen, allerdings brauchst du dazu (Sub-Selects) MySQL ab Version 4.1.0

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich weiß schon, dass es redundant ist. Aber es war nicht anders möglich:

Ich habe von einem Kunden zwei Excel-Tabellen bekommen. Eine mit allen Kunden die Produkt A gekauft haben und eine mit allen Kunden die Produkt B gekauft haben. Die beiden Dateien enthalten redundante Datensätze und Kundennummern (oder einen anderen Primärschlüssel) gibt es nicht. Aufgabe Finde alle Kunden die ausschließlich Produkt A gekauft haben.

Man hätte das Ganze auch direkt aus dem "Sanduhren-Anzeige-Programm" (SAP) vom Kunden auslesen können, aber dafür hätte man nen Programmierer, der SAP spricht, beauftragen müssen, was teurer gewesen wäre.

@JesterDay: Wie hättest Du das Problem gelöst?

Gruß Tobias

Link zu diesem Kommentar
Auf anderen Seiten teilen

@JesterDay: Wie hättest Du das Problem gelöst?

Gute Frage.

Du solltest das ganze aber nicht als pers. Angriff o.ä. sehen (so kommt mir das vor (s. Zitat)). Ich kannte die Ausgangslage ja nicht sondern nur die Umstände, die du beschrieben hast. Ich habe dazu nur eine Lösung angeboten. Ausgehend von dem Gedanken das du die Datenstrukturen selber in der Hand hast und nicht von 2 Exceltabellen die Daten bekommst...

Link zu diesem Kommentar
Auf anderen Seiten teilen

Mich interessiert wirklich wie die doch recht ****ende Aufgabe von anderen in Angriff genommen würde :-)

Also ich gehe jetzt mal davon aus, dass die Excel-Tabellen gleich und einigermassen passend aufgebaut sind.

KundenNr | KundenName | KundenAdr

Da ich mir jetzt nicht 100% sicher bin, ob nicht ein Import von csv-Dateien in MySQL funktioniert würd ich sagen diese Tabellen in Access importieren. Damit hast du die Tabellen Prod1 und Prod2, jeweil mit den o.g. Feldern. Die könntest du mit entspr. Tools nach MySQL übertragen (ODBC-Access, ODBC-MySQL und Borland DataPump, haben wir letztens grad gemacht ;) ).

In MySQL erstellst du eine neue Tabelle "Kunden" und füllst diese mit Daten:

INSERT INTO Kunden SELECT DISTINCT Nr, Name, Adr FROM Prod1

INSERT INTO Kunden SELECT DISTINCT Nr, Name, Adr FROM Prod2 where Nr NOT IN (SELECT Nr FROM Kunden)

Damit hast du eine Kundentabelle mit KundenNr als eindeutigem Schlüssel.

Dann erstellst du eine Tabelle "Produkte" und füllst die von Hand mit

Id = 1, Produkt = 'Produkt1'

Id=2, Produkt = 'Produkt2'

Ausserdem erstellst du eine dritte Tabelle "Posten" mit einer ID (AutoIncrement), KundenNr und ProduktID und füllst die:

INSERT INTO Posten SELECT DISTINCT NULL, Nr, 1 FROM Prod1

INSERT INTO Posten SELECT DISTINCT NULL, Nr, 2 From Prod2

(Null ist für die AutoInc ID, die wird damit automatisch hochgezählt).

Damit solltest du den von mir oben genannten Aufbau haben ;)

Wenn es allerdings einfach nur um ein einmaliges Ding geht, die Namen der Kunden zu erhalten, die nicht Prod1 gekauft haben ist deine Lösung wahrscheinlich die kürzere ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...