这是我的程序,它应该从数据库返回一篇文章,文章是由我从C#代码发送的文章代码选择的一个参数叫做
_searchParam
,现在我遇到的情况是我的文章包含例如100的代码,该文章被删除,后来我添加新文章并将其代码设置为100,
所以现在我在数据库中有两篇文章使用相同的代码,区别在于其中一篇文章被删除了
这就是我说的原因:
AND T1.IsDeleted = 0;
但是程序会使用搜索到的代码(以及已删除的代码)重新撰写第一篇文章,因此看起来AND T1.IsDeleted = 0;
会被忽略或者它不计算在内。
此处的程序:
CREATE DEFINER=`root`@`localhost` PROCEDURE `ArticleGetArticle`(
_searchParam varchar(50)
)
BEGIN
SELECT T1.*,T2.*,T3.Value, T3.Description
From articles as T1 LEFT JOIN barcodes as T2 ON T1.ArticleId=T2.ArticleId JOIN taxes as T3 ON T1.TaxId=T3.TaxId
Where T1.ArticleCode=_searchParam OR T2.Value=_searchParam AND T1.IsDeleted = 0;
END
状态为T1.IsDeleted = '1'
的文章总是被返回(第一个),因为它是sql创建的第一个,
而且我不知道为什么我的Where clausule中的T1.IsDeleted = '0'
会被忽略..
答案 0 :(得分:1)
T1.ArticleCode=_searchParam OR T2.Value=_searchParam AND T1.IsDeleted = 0;
这被解释为
(T1.ArticleCode=_searchParam) OR (T2.Value=_searchParam AND T1.IsDeleted = 0);
尝试添加自己的括号,如下所示:
(T1.ArticleCode=_searchParam OR T2.Value=_searchParam) AND T1.IsDeleted = 0;