Hagen: Gruppierung einer sql abfrage

Hallo,
ich möchte eine datenbank abfrage in der art machen:
select * mit dem begriff und dem begriff oder einem der begriffe(....) und nicht diesem Begriff.

logisch also so:

A und B und (C oder D) und Nicht(E oder F)

mein problem ist hierbei die gruppierung:

select * from tabelle where spalteA like %begriff1% and %begriff2% so und nun kann ich ja nicht
 and spalteA like %begriff3% or like %begriff4% ...

schreiben oder die klammern setzten,da meines Wissens ja das and stärker bindet als das or.
Wie macht mans also richtig???

MFG Hagen

  1. yo,

    ich denke mal das bste ist, du gibst uns beispieldatensätze aus der tabellle und welche datensätze du daraus als ergebnis mit einer abfrage haben willst. nicht zu vergessen dein dbms und die version mit anzugeben.

    Ilja

    1. Hallo,
      danke für deine antwort.
      ich versuchs nochmal so.

      In dem Datensatz sollen die wörter a und b vorkommen.
      Zusätzlich soll noch irgendeins der wörter(oder alle oder nur 2):c d e vorkommen.
      Aber nicht das wort f.

      Hoffe habs jetzt besser erklärt.

      MFG Hagen

      1. achja
        MySQL-Client-Version: 5.0.33
        Server Version: 5.0.33
        Protokoll-Version: 10

        MFG hagen

      2. yo,

        wie gesagt, beispieldaten sind immer besser für uns, so fischen wir immer im trüben wasser.

        SELECT *
        FROM tabelle
        WHERE spalteA LIKE '%begriff1%'
        AND spalteA LIKE '%begriff2%'
        AND (spalteA LIKE '%begriff3%' OR spalteA LIKE %begriff4%)
        AND (spalteA NOT LIKE '%begriff3%' OR spalteA NOT LIKE %begriff4%)
        ;

        solche arten der abfragen sind aber sehr unperformant. das thema volltext-index wäre für dich eventuell interessant, bzw was genau steht denn in spalteA drinne ?

        Ilja

        1. <edit modus an>

          da fehlen noch die einfachen hochkommta an zwei stellen und vor lauter begriffen bin ich beim copy und paste mit dem zählen durcheinander gekommen ;-)

          SELECT *
          FROM tabelle
          WHERE spalteA LIKE '%begriff1%'
          AND spalteA LIKE '%begriff2%'
          AND (spalteA LIKE '%begriff3%' OR spalteA LIKE '%begriff4%')
          AND (spalteA NOT LIKE '%begriff5%' OR spalteA NOT LIKE '%begriff6%')
          ;

          <edit modus aus>

          Ilja

          1. Super danke das "AND(" ist eigentlich alles was ich wissen wollte, um nun dieses monstrum an query perfekt zu machen wäre es schön, an deine beispielquery noch " AND WHERE SPALTE2='G'" anhängen zu können, würde das gehen?
            Achja nochwas woher weiß man eigentlich immer gleich ob die query performant ist oder eben nicht so??? Erfahrung oder gibts beim aufstellen sowas wie die "10 goldenen regeln für eine performante query":-)

            MFG Hagen

            1. yo,

              Super danke

              bitte schön. das nächste mal dann aber auch immer beispieldaten angeben. diese helfen uns ungemein. gerade bei neuligen in sachen sql hat man damit zu kämpfen, dass das problem nicht richtig beschrieben wird oder falsche angaben gemacht werden. genau dafür helfen uns die beispieldaten aus den tabellen und das gewünschte ergebnis.

              an deine beispielquery noch " AND WHERE SPALTE2='G'" anhängen zu können, würde das gehen?

              ja, aber dann bitte ohne das WHERE sondern nur AND SPALTE2='G' anhängen.

              Achja nochwas woher weiß man eigentlich immer gleich ob die query performant ist oder eben nicht so??? Erfahrung oder gibts beim aufstellen sowas wie die "10 goldenen regeln für eine performante query":-)

              von dem allen ein wenig. erfahrung spielt eine rolle, dann das dbms und die version, die menge der daten, der inhalt, faustregeln wann und wie man welchen index einsetzen sollte, etc. aber unter dem strich zählt immer nur ausprobieren. selbst die größten experten werden oft von der realen ausführung einer abfrage überrascht.

              Ilja