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!!!
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!!!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 266489
Url: https://administrator.de/contentid/266489
Ausgedruckt am: 15.11.2024 um 23:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo!
Zunächst sollte man Redundanz in einer Datenbank tunlichst vermeiden
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
Gruß
Eisbein
Zunächst sollte man Redundanz in einer Datenbank tunlichst vermeiden
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
Gruß
Eisbein
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
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
Moin datadexx,
die Schwierigkeiten mit dem UNION kann ich nicht nachvollziehen.
Ist doch hier die einzige Chance, die du hast.
Abfrage sollte so aussehen
"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]
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]