为什么我得到的结果与第一个WHERE子句不匹配?

时间:2017-07-13 07:56:36

标签: sql sql-server

WHERE [SOTR_CUST_CODE] = 'O004'
  AND [SOTD_STRC_CODE] LIKE 'PC%'
   OR [SOTD_STRC_CODE] LIKE 'PD%'

这会返回不是“O004”的客户记录,而且我不确定原因。还有一种更好的方法来搜索一个字符串,该字符串可以从2个不同的字符集开始而不使用LIKE函数两次吗?

使用SQL Server 2012

2 个答案:

答案 0 :(得分:4)

您需要在子句中使用括号。如果没有括号,则表示:

(A和B)OR C

因此,无论条件A或B如何,您都将获得与条件C匹配的所有记录。

答案 1 :(得分:1)

我知道它已经有了非常好的答案(感谢Laposhasu Acsa),但想为未来的读者澄清:

  

下面的代码(没有括号)与(A和B)或C

相同
WHERE [SOTR_CUST_CODE] = 'O004'
  AND [SOTD_STRC_CODE] LIKE 'PC%'
   OR [SOTD_STRC_CODE] LIKE 'PD%'
  

首先解决方案是使用括号:

WHERE [SOTR_CUST_CODE] = 'O004'
  AND ([SOTD_STRC_CODE] LIKE 'PC%'
        OR [SOTD_STRC_CODE] LIKE 'PD%')
  

适合这种特殊情况的第二种解决方案是:

WHERE [SOTR_CUST_CODE] = 'O004'
  AND [SOTD_STRC_CODE] LIKE 'P[CD]%'