2016-06-30 5 views
-2

...USE変数

SET @var = '1,2,3'; 
SELECT * FROM Table WHERE ID IN (@var); 
+1

テーブルのスキーマを表示 – 1000111

+0

元のクエリに 'GROUP BY'も' DISTINCT'もありません 'SELECT OtherID FROM Table WHERE X = 1'となるので、100%等価ではありません。 – Alex

+0

私は質問の中核要素に焦点を当てるために私の質問を(削除する代わりに)編集しました...既存の答えは間違った部分に集中しようとしていました。 – Barry

答えて

0

ソリューションがthis answer

SET @var = '1,2,3'; 
SET @Expression=CONCAT('SELECT * FROM TableWHERE ID IN (',@var,')'); 
PREPARE myquery FROM @Expression; 
EXECUTE myquery 
を見ることで発見された使用
1

登録しよう

SELECT t1.* 
FROM Table t1 
JOIN Table t2 on t1.OtherID = t2.OtherID 
WHERE t2.X = 1 
+0

同じテーブルを自己結合することができます。私は自分のクエリを更新しました –

+0

@Barry何よりも何を意味するのですか?あなたはいくつかの番号を提供できますか?そのトリックが速くなる唯一の理由は、MySQLのキャッシュを適切にテストしなかったことだけです。したがって、両方のクエリを 'SQL_NO_CACHE'で実行して、それぞれの元のパフォーマンスを確認してください。 – Alex

+0

@バリー:私のクエリはまだ遅いですか?次に、 'X'列にインデックスを追加します。それはあなたの問題を解決するはずです –