MySQL logical operators

后端 未结 4 1244
旧时难觅i
旧时难觅i 2021-01-14 23:40

Given the query \'SELECT foo FROM bar WHERE a = x AND b = y OR c = z\', how does it parse this query?

(a = x AND b = y) OR c = z?

相关标签:
4条回答
  • 2021-01-15 00:24

    (a = x AND b = y) OR c = z

    http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

    0 讨论(0)
  • 2021-01-15 00:28

    from the MySQL manual section 11.2.1. Operator Precedence: http://dev.mysql.com/doc/refman/5.0/en/operator-precedence.html

    AND has precedence over OR. (a = x AND b = y) OR c = z is the equivalent expression.

    0 讨论(0)
  • 2021-01-15 00:36

    As already answered, AND would have precedence and be parsed first.

    I think the answer you're really looking for here is: don't write a query like SELECT foo FROM bar WHERE a = x AND b = y OR c = z.

    If what you mean is SELECT foo FROM bar WHERE ((a = x AND b = y) OR c = z) or you meant to have SELECT foo FROM bar WHERE (a = x AND (b = y OR c = z)) then write it that way from the beginning.

    It will save you having to figure it out when you look at the query again next week (or month, or year) and it will make things easier on future maintainers as well.

    0 讨论(0)
  • 2021-01-15 00:39

    AND is higher precedence.

    0 讨论(0)
提交回复
热议问题