Klaus2: Wie am Besten MySQL-Abfrage nach mehreren Feldern?

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

  1. 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

  2. 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.