datadexx
Goto Top

MYSQL Abfrage von 2 identischen Tabellen

Hi an alle MYSQL Profis,

ich hätte folgende Frage.

Ich habe 2 Tabellen (kstamm, ustamm), diese sind vom Aufbau 100% identisch, bis auf den auto_increment Wert. Der beginnt bei der einen Tabelle bei 10000, bei der anderen bei 80000.

In der einen sind die Kunden, in der anderen die Unternehemer abgelegt. Ich möchte die Tabellen mit LIKE abfragen (für eine Ajax Suche), das er mir aus beiden Tabellen Datensätze wiedergibt.

Ungefähr so: SELECT * FROM kstamm, ustamm WHERE firma LIKE 'ga%'. Das ergibt natürlich einen ambigous Fehler von Firma.

SELECT * FROM kstamm, ustamm

WHERE kstamm.firma LIKE 'ga%' OR ustamm.firma LIKE 'ga%' schiesst MYSQL Datensätze doppelt und dreifach raus.

Mit Union hab ich auch schon rumprobiert, aber dann schiesst er mir immer erst alle der ersten abgefragten Tabelle raus usw.

Wie muss ich die Abfrage lösen, das wenn ich in meinem Suchfeld anfange die Buchstaben zu tippen er dann die beiden Tabellen abfragt?

Danke für Hilfe!!!

Content-Key: 266489

Url: https://administrator.de/contentid/266489

Printed on: April 24, 2024 at 16:04 o'clock

Member: eisbein
eisbein Mar 16, 2015 updated at 18:32:39 (UTC)
Goto Top
Hallo!

Zunächst sollte man Redundanz in einer Datenbank tunlichst vermeiden face-smile

Es ist besser alles in einer Tabelle zu haben und ein zusätzliches Feld, welches kennzeichnet ob es ein Kunde oder Unternehmer ist (dazu reicht schon 0 oder 1)
Somit ist das Filtern kein Problem und es können sogar mehr als 70000 Kunden werden face-smile

Gruß
Eisbein
Member: maretz
maretz Mar 16, 2015 at 18:39:55 (UTC)
Goto Top
Moin,

dir fehlt da einfach irgendwas was du vergleichen könntest - und somit gibt dir die DB auch "unsinn" zurück. Du könntest jetzt mit DISTINCT doppelte Datensätze rauswerfen. Aber deine Abfrage is halt trotzdem nicht korrekt. Du könntest 2 Abfragen machen - dann hättest du zumindest die richtige Anzahl an Ergebnissen... Oder du machst die DB korrekt und hast nur EINE Tabelle mit einem entsprechenden Identifier für Kunde/Unternehmer. Das wäre vermutlich die schönste Option, aber nachträglich ggf. schwer zu realisieren...

Gruß,

Mike
Member: Biber
Biber Mar 16, 2015, updated at Mar 17, 2015 at 12:20:46 (UTC)
Goto Top
Moin datadexx,

die Schwierigkeiten mit dem UNION kann ich nicht nachvollziehen.
Ist doch hier die einzige Chance, die du hast.

Abfrage sollte so aussehen
Select * from ( 
        Select 'Kstamm' as Tab, Firma, Feld1, Feld2, FeldN   
        From kStamm where firma like 'ga%'  
Union All 
        Select 'Ustamm' as Tab, Firma, Feld1, Feld2, FeldN   
        From UStamm where firma like 'ga%'  
) x
order by 2, 1

"Union All" hängt alle Treffer aus Kstamm und Ustamm untereinander, ohne auf Duplikate zu prüfen und ohne zu sortieren.
Ist deshalb um ein Vielfaches schneller als "union" ohne "all"
Ausgegeben werden die Sätze sortiert nach Firma und QuellTabelle.

Bitte erzähl noch mal, was dein UNION-Problem war.

Grüße
Biber
[Edit] Alias x ergänzt (s.Antwort datadexx) [/Edit]
Member: evolution
evolution Mar 16, 2015 at 19:28:52 (UTC)
Goto Top
Du könntest auf dem Server eine "Stored Procedure" mit einem Union All dafür anlegen. Dann kannst du auf die wie eine Tabelle mit einem DISTINCT zugreifen.
Member: datadexx
datadexx Mar 17, 2015 at 12:15:42 (UTC)
Goto Top
Hi Bber und auch an die anderen, erst mal Danke für eure Hilfe!

Bei Union hatte ich das Problem, dass im Ergebnis ein Kunde oder ein Unternehmer mehrfach (bis zu 30x) angezeigt wurde und dann erst wieder ein anderer Datensatz kam. Der Ansatz von Bibder hat aber die Lösung gebracht, lediglich musste noch ein Alias für die äußere Query hinzu.

Vielen Dank!