ホームページ >バックエンド開発 >PHPチュートリアル >mysql クエリの質問についてアドバイスを求める: 私の SQL ステートメントではすべての状況を網羅できないのはなぜですか?

mysql クエリの質問についてアドバイスを求める: 私の SQL ステートメントではすべての状況を網羅できないのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 14:16:591054ブラウズ

mysql クエリ

select count(*) from t1 wherecol1 > 0
339074 項目

select count(*) from t1 wherecol1 > 0 and LENGTH(col2) > 0

select count(*) ) from t1 wherecol1 > 0 and LENGTH(col2) = 0
0

2 番目と 3 番目の項目で見つかった結果の合計が最初の項目で見つかった結果と異なるのはなぜですか?型、長さ 150、格納された URL アドレス (空または数値の場合もあります)
col1 フィールド int 型、特定の数値を格納します
さらに:
select count(*) from t1 wherecol1 > 0 and col2 > 0
16484

select count(*) from t1 wherecol1 > 0 andcol2 = 0
32584


ディスカッションへの返信 (解決策)
select count(*) from t1 wherecol1 > 0
3390 74 項目

select count(*) from t1 wherecol1 > 0 and LENGTH(col2) > 0

52308

select count(*) from t1 wherecol1 > 0 and LENGTH(col2) = 0

なぜ 2 番目なのかitem 3 番目の項目で見つかった結果の合計は、最初の項目で見つかった結果と異なりますか?

col2 フィールドは varchar 型、長さ 150、および格納された URL アドレス (空または数値の場合もあります) です
Col1 フィールドは int 型で、特定の数値を格納します

さらに、
select count(*) from t1 wherecol1 > 0 and col2 > 0
16484

select count(*) from t1 wherecol1 > 0 で、col2 = 0

いいえ、これは正常ですよね。col2 フィールドは varchar 型で、長さは 150 です。保存されている URL アドレス (空または数値の場合もあります)
文字列なので、すでに問題は、col2 > 0 と直接比較する場合です。文字列がすべてです。このように比較することはできません
これは 1 つと 2 つであり、文字列は空である可能性があり、0 または 0 より大きいだけではありません

select count (*) from t1 where col1 > 0 andcol2 = ''
0

select count (*) from t1 wherecol1 > 0 and col2 != ''

52308


これでは完全にはカバーできません...

select count(*) from t1 wherecol1 > 0 andcol2 is null これには値がありますか?

まだ QQ に追加されていないのですが、とても心配です - -

select count(*) ) t1 から、col1 > 0、col2 は null これは価値がありますか?

さて... 284786 こうなります

ありがとうございます...


さらに、QQ に追加しました見てください


select count(*) from t1 wherecol1 > 0 andcol2 is null これは価値がありますか?

さて... .284786 以上です

ありがとうございます...

また、QQ にあなたを追加しましたが、QQ メッセージが表示されませんでした。 。 。テンセントは2Bですか?私は汗をかいている! ! !

col2 も空の可能性があるため: null
当然、LENGTH(col2) = 0 の範囲には属しません

学習した将来、mysql は文字列をチェックするときに null であることを考慮する必要があります

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。