2010-05-30 5 views
0

La première ci-dessous fonctionne, mais je voulais juste voir s'il y a une meilleure façon ...postgres question de syntaxe pour OR?

Si je suis en train de trouver tous les enregistrements qui commencent par « C » soit avec un drapeau de 2 ou un statut de 9, dois-je intégrer deux fois le critère C?

dire,

"SELECT * FROM mytable WHERE name like 'C%' AND flag = 2 OR name like 'C%' AND status = 9" 

Ou, est-il un moyen plus rapide d'écrire afin que je ne ai besoin de mettre en « C% » une fois?

Répondre

1

Logiquement, AND et OR sont distributive à l'autre, à savoir

a & (b | c) = (a & b) | (a & c) 

cela signifie que votre condition peut être réécrite comme

name LIKE 'C%' AND (flag = 2 OR status = 9) 
+0

Oh, génial ... Merci. – Dashiell0415

1

OU a une priorité inférieure et si vous avez besoin entre parenthèses.

WHERE nom LIKE "C%" ET (flag = 2 OU flag = 9)

vous pouvez également vérifier l'appartenance à un ensemble de valeurs

... ET flag (1, 9