19

今日、私はこのようなクエリで回答を投稿しました

SELECT * FROM table_name where column_name IN (val1,val2,...)

別のユーザーがこのようなクエリの回答を投稿しました

SELECT * FROM table_name where val1 IN (column_name)

ここでわかるように、column_name と値の位置が入れ替わっています。

Mysql ドキュメントから

expr IN (値,...)

expr が IN リストのいずれかの値と等しい場合は 1 を返し、そうでない場合は 0 を返します。すべての値が定数である場合は、expr の型に従って評価され、並べ替えられます。アイテムの検索は、バイナリ検索を使用して行われます。これは、IN 値リストが完全に定数で構成されている場合、IN が非常に高速であることを意味します。

mysql> SELECT 2 IN (0,3,5,7);
-> 0

mysql> SELECT 'wefwf' IN ('wee','wefwf','weg');
-> 1

上記のもの(私のクエリ)が正しいことは明らかです。ただし、上記のクエリはどちらも同じ出力を生成します。

また、 Mysql Documentationにリストされている他のアプローチではないのはなぜですか?

この質問は、IN の使用に関する正規の情報源として役立ちます。その目的は、クエリでの IN の適切な使用法を詳述する、詳細で質の高い回答を得ることです。

4

2 に答える 2

32

あなたはここで私の答えに関連する質問を提起しました。

以下のこのステートメントを使用した簡単な説明では、

SELECT * FROM TableName WHERE column1 IN (1, 2, 3, 4)
-- versus
SELECT * FROM TableName WHERE 1 IN (column1, column2, column3, column4)

最初のステートメントには、複数の値と比較される1 つのCOLUMNのみが含まれます。

SELECT  *
FROM   TableName
WHERE  column1 = 1 OR
       column1 = 2 OR
       column1 = 3 OR
       column1 = 4

2 番目のステートメントは、複数の列と比較されるVALUEです。

SELECT  *
FROM   TableName
WHERE  column1 = 1 OR
       column2 = 1 OR
       column3 = 1 OR
       column4 = 1

これは互いに少し異なります。


更新 1

IN節の 3 番目の形式は次のとおりです。

于 2013-04-20T06:43:15.580 に答える