SQL查询where子句

use*_*331 5 sql where-clause

我在我的SQL查询中有这一行:

WHERE client = $id
    AND (isinvoiced = 0) OR (isinvoiced = 1 and isrecurring = 1)
Run Code Online (Sandbox Code Playgroud)

这得到的结果比我预期的要多.但是,如果我这样写:

WHERE client = $id
    AND (isinvoiced = 0) OR (isinvoiced = 1 and isrecurring = 1 and client = $id)
Run Code Online (Sandbox Code Playgroud)

然后它得到了我想要的结果,但这是写这个的最好方法吗?我只是不想让这个代码遇到任何问题.

Mic*_*ski 8

你需要()在整个AND条款中再多做一套.这表明client = $id必须是真的,其他条件中的任何一个也必须是真的= isinvoiced = 0或者它的组合isinvoiced = 1 and isrecurring = 1.

 WHERE client = $id
    AND ((isinvoiced = 0) OR (isinvoiced = 1 and isrecurring = 1))
Run Code Online (Sandbox Code Playgroud)