Wie am Besten MySQL-Abfrage nach mehreren Feldern?
Klaus2
- mysql
- programmiertechnik
Hallo,
ich habe zwei Tabellen, in der einen (tab1) stehen Mitarbeiter mit Ihrer Personalnummer, vollständigem Namen, Telefonnummer etc. In der zweiten Tabelle (tab2) gibt es mehrere Felder, die eine Personalnummer enthalten (Erfasser, letzter Änderer, Verantwortlich, Prüfer, ...)
Ich möchte mir alle Einträge anzeigen lassen, wo irgendwo der Name Max vorkommt.
Bei nur einem Feld hätte ich das wohl mit einem Join gemacht:
select tab1.*, tab2.*
from tab2 left join tab1 on tab2.erfasser = tab1.pnr
where tab1.name like '%Max%'
Kann ich mit nur einem Statement nach allen Feldern suchen?
LG Klaus
Hallo KLaus,
Kann ich mit nur einem Statement nach allen Feldern suchen?
So müsste es funktionieren:
SELECT
tab1.*
,tab2.*
FROM tab1, tab2
WHERE tab1.name LIKE '%Max%' COLLATE 'utf8_bin' -- a und a-Umlaut unterscheiden
AND ( tab1.name = tab2.erfasser
OR tab1.name = tab2.aenderer
OR tab1.name = tab2.verantwortlich
OR tab1.name = tab2.pruefer )
(nicht getestet)
Tipp: Der LIKE ist komisch, wenn man nach Ü sucht, findet er auch U und Ümgekehrt. Wenn das nicht erwünscht ist, beschäftige dich mit COLLATE.
Linuchs
Tach!
Kann ich mit nur einem Statement nach allen Feldern suchen?
Eine Join-Bedingung kann auch aus einem komplexeren Ausdruck bestehen. Du kannst also problemlos mit id=feld1 OR id=feld2 OR id=feld3
verknüpfen.
select tab1.*, tab2.* from tab2 left join tab1 on tab2.erfasser = tab1.pnr where tab1.name like '%Max%'
Aber warum ein Left Join? Es kann in der zweiten Tabelle keine Daten geben, die du haben möchtest, aber die nicht in der ersten Tabelle vorkommen.
dedlfix.