2017-10-10 1 views
0

データベースからアーティクルを返す必要があるプロシージャは、 _searchParamというパラメータとしてC#コードから送信するアーティクルコードによってアーティクルが選択されています。私は例100のコードを持つ記事を持っていました。その記事は削除され、後で新しい記事を追加してコードを100に設定しました。 これで、同じコードのデータベースに2つの記事があります。プロシージャが期待通りに動作しない

AND T1.IsDeleted = 0; 

が、それは李に見えますので、手続きは、検索コードとの最初の記事をreturs(そしてそれは1を削除しています):私が言った理由、それはですKE AND T1.IsDeleted = 0;は無視されるか、それは数えていない。..

ここで手順:それは創設をSQL最初のものですので、状態T1.IsDeleted = '1'

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

記事はオールウェイズ、(最初のもの)が返されます とclausuleは無視されている場合、なぜT1.IsDeleted = '0'私の中の私にはわからない...

+0

は、あなたが3つの条件articlecode = searchparm OR値= searchparmと= 0 isdeletedを持っている依存 - 多分あなたが作るために、それらの周りに括弧が必要その正しいミックスをしていることを確認しますか? – 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照会について多くのことを学ぶ必要がある。とにかくありがとう –

関連する問題