Roger: /MySQL suchanfrage über mehrere tabellen

moin!

wie formuliert man (vereinfacht) eine suchanfrage über mehrere tabellen?

bsp:
tab1
id|name|datum|[...]

tab2
id|tab1id|xy|[...]

tab1 ist so eine art adressdatenbank.
tab1id in tab2 enthält die id aus tab1. tab2 enthält sogn. aktionen. kann also mehrere einträge mit gleicher tab1id haben.

sucht man jetzt nur nach spalte xy, so muss nur tab2 geprüft werden.
(select * from tab2 where xy like '%search%')

sucht man aber nach allen zeilen in tab2, die 'name' ausgeführt hat, wirds kompliziert. bzw. weiß ich nicht weiter, weil ja tab1id in name aufgelöst werden muss.

ich hoffe ich konnte in ungefähr mein problem schildern. hat jmd einen ansatz für mich? 1000dank!

gruß.
roger.

--
ich widersprech mir immer selber.
aber das passiert mir gott sei dank nie.
  1. 你好 Roger,

    wie formuliert man (vereinfacht) eine suchanfrage über mehrere tabellen?

    Du Joinst die notwendigen Tabellen zusammen (z. B. über LEFT JOIN) und
    verknüpfst die Vergleiche für jedes Feld mit einem OR.

    sucht man aber nach allen zeilen in tab2, die 'name' ausgeführt hat,
    wirds kompliziert. bzw. weiß ich nicht weiter, weil ja tab1id in name
    aufgelöst werden muss.

    Mach halt einen Join, der dir die notwendigen Daten dazuholt. Wo genau liegt
    gerade dein Problem?

    Übrigens, überlege dir, ob du wirklich mit einem LIKE "%wort%" arbeiten
    willst. Das führt zwangsläufig zu einem full table scan. Das bedeutet, dass
    die Datenbank in jedem Fall zwingend jeden Datensatz auf diese Bedingung
    hin überprüfen muss. Wenn du mit einem LIKE "wort%" arbeiten kannst, oder
    auch mit einem Fulltext-Index, dann müssen uU nur noch [latex]\log_2n[/latex]
    Datensätze (wobei n für die Anzahl der Datensätze steht) überprüft werden.

    再见,
     克里斯蒂安

    --
    Bruce Lee, der Meister | Neues Design im Thema
    Sich erinnern bedeutet, aus einer Erfahrung nicht ausreichend gelernt zu haben.
    http://wwwtech.de/
    1. moin!

      Du Joinst die notwendigen Tabellen zusammen (z. B. über LEFT JOIN) und
      verknüpfst die Vergleiche für jedes Feld mit einem OR.

      danke christian!
      stand wieder direkt vor dem wald und hab ihn nicht gesehen. in meinem fall geht das ziemlich simpel zu lösen:

      SELECT tab1.name, tab2.xy FROM tab1 left join tab2 on tab1.is = tab2.tab1id where tab1.name like '%search%'

      Übrigens, überlege dir, ob du wirklich mit einem LIKE "%wort%" arbeiten
      willst. Das führt zwangsläufig zu einem full table scan.

      yop, war auch nur zur veranschaulichung.

      gruß.
      roger.

      --
      ich widersprech mir immer selber.
      aber das passiert mir gott sei dank nie.