过程无法按预期工作

时间:2017-10-10 07:15:21

标签: c# mysql stored-procedures mysql-workbench

这是我的程序,它应该从数据库返回一篇文章,文章是由我从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

enter image description here

状态为T1.IsDeleted = '1'的文章总是被返回(第一个),因为它是sql创建的第一个, 而且我不知道为什么我的Where clausule中的T1.IsDeleted = '0'会被忽略..

1 个答案:

答案 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;