2017-10-10 150 views
0

這是我的程序,它應該從數據庫中返回一篇文章,文章由我從我的C#代碼發送的文章代碼選擇,作爲名爲 _searchParam的參數,現在我遇到了這種情況我曾與例如100代碼項目,並且該文章被刪除了,後來我添加新的文章,它的代碼設置爲100, 所以我現在所用相同的代碼庫兩篇文章,與不同的是他們中的一個將被刪除 這就是爲什麼我說:程序沒有按預期工作

AND T1.IsDeleted = 0; 

但過程returs第一篇文章與搜索代碼(而這刪除的一個),所以看起來李柯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創立的第一個, ,我不知道爲什麼T1.IsDeleted = '0'我在哪裏clausule被忽略..

+0

取決於你有3個條件articlecode = searchparm OR值= searchparm並請將isDeleted = 0 - 也許你需要圍繞這些括號使確保它做正確的組合? – BugFinder

回答

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; 
+0

我會接受的答案在7分鐘內,這作品。我在八方SQL方面犯錯誤,從不在我的C#代碼:/我需要學習很多關於SQL查詢的模樣。不管怎麼說,還是要謝謝你 –