Lavender: WHERE ... AND ... OR - Frage

Hallo zusammen,

ich habe folgenden Befehl:

SELECT Nr, Titel, Kat
FROM page
WHERE TextA LIKE '%test%'
AND   Activator = 'activ'
OR    TextB LIKE '%test%'
AND   Activator = 'activ'
ORDER BY Titel ASC

muss ich das zweite AND Activator = 'activ' mit reinsetzen, oder reicht dieser Befehl (in beiden - TextA und TextB - muss Activator "activ" sein):

SELECT Nr, Titel, Kat
FROM page
WHERE Activator = 'activ'
AND   TextA LIKE '%test%'
OR    TextB LIKE '%test%'
ORDER BY Titel ASC

Danke im Voraus.

Gruß
Lavender

  1. hi,

    WHERE Activator = 'activ'
    AND   TextA LIKE '%test%'
    OR    TextB LIKE '%test%'

    Das selektiert alle Datensätze, in denen Activator='activ' ist UND TextA 'test' enthält - oder in denen auch nur TextB 'test' enthält.

    (in beiden - TextA und TextB - muss Activator "activ" sein)

    Vielleicht möchtest du ein paar Klammern setzen.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
  2. Hi,

    muss ich das zweite AND Activator = 'activ' mit reinsetzen, oder reicht dieser Befehl (in beiden - TextA und TextB - muss Activator "activ" sein):

    das ist eine Frage der Klammerung. In aller Regel ist die Operatorrangfolge NOT-AND-OR, d.h. das AND bindet stärker als OR:
    x AND y OR z -> Es müssen x und y gelten, oder eben z

    In deinem Fall 1 funktioniert also alles richtig, du wählst einen der beiden Fälle aus. Deine verkürzte Variante 2 liefert nicht das gewünschte Ergebnis, das sie Sätze liefert die (activ+TextA) oder TextB haben. Eine Klammerung hingegen rückt alles wieder ins richtige Licht:
    WHERE Activator'activ'
    AND (TextA LIKE '%test%' OR TextB LIKE '%test%')

    MfG
    Rouven

    --
    -------------------
    ie:| fl:| br:> va:| ls:& fo:) rl:( n4:{ ss:) de:] js:| ch:? mo:} zu:|
  3. Danke euch beiden - jetzt gehts einwandfrei.

    Viele Grüße
    Lavender