SQL ステートメントのスキル: OR を巧みに使用して、クエリ時に論理的な判断を実現します。

伊谢尔伦
リリース: 2016-11-23 13:43:17
オリジナル
1480 人が閲覧しました

まず、次の SQL 論理ステートメント ブロックを見てください:

DECLARE @fieldname    varchar(50)
DECLARE @fieldvalue nvarchar(100)
SET @fieldname='chassisno' --这里可传入chassisno,plateno,owner,contacttelno其中之一或不传
SET @fieldvalue='Zuowenjun'
IF @fieldname = 'chassisno'
BEGIN
    SELECT * FROM TABLENAME WHERE chassisno=@fieldvalue
END
ELSE IF @fieldname = 'plateno'
BEGIN
    SELECT * FROM TABLENAME WHERE plateno=@fieldvalue
END
ELSE IF @fieldname = 'owner'
BEGIN
    SELECT * FROM TABLENAME WHERE [owner]=@fieldvalue
END
ELSE IF @fieldname = 'contacttelno'
BEGIN
    SELECT * FROM TABLENAME WHERE contacttelno=@fieldvalue
END
ELSE
BEGIN
    SELECT * FROM TABLENAME
END
ログイン後にコピー

ここで、SQL ステートメントを使用して上記の論理判断を実装し、結果をクエリする必要がある場合は、次のスプライシング メソッドを使用してそれを実現することを検討してください:

DECLARE @sqltext NVARCHAR(2000)
SET @sqltext='SELECT * FROM TABLENAME WHERE ' + @fieldname + '=''' + @fieldvalue +''''
EXECUTE (@sqltext)
ログイン後にコピー

これは論理的な判断とクエリの結果が可能であるように見えますが、十分に直感的ではないようですが、変更は面倒でエラーが発生しやすく、いくつかの制限があります。なぜなら、ここでの @fieldname はテーブルのフィールドと同じであるため、結合は比較的簡単です。それらが同じでなければ、それは達成できません。そのため、ここでは効率については触れませんが、次の SQL ステートメントを参照してください。

この SQL 文は論理的な判断とクエリ結果を実現できることが確認されており、@fieldname がテーブルのフィールドと異なっていても、対応するフィールドを直接置換することもできます。

AND (( @fieldname = 'chassisno' AND a.chassisno=@fieldvalue) OR (@ fieldname<>'chassisno') )

これは AND 関連付けであるため、次の括弧内の条件を満たす必要があり、OR 関連付けであるため、が括弧内で使用されている場合、@fieldname = 'chassisno' の場合、変換するには、@fieldname<> である限り、a.chassisno=@fieldvalue が必要です。 'chassisno'、以前の関連条件は無視されます。それらの特性は相互に排他的であることに注意してください。つまり、OR の両側の条件はどちらか一方のみを満たすことができます。もちろん、より良い方法や異なる意見がある場合は、交換を歓迎します。そして一緒に進歩していきましょう!


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!