2016-06-30 3 views
-2

Как использовать следующую переменную контента для запроса IN ...Использование переменных для IN Операции

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

@ Барри, что вы подразумеваете под _much, намного быстрее_? можете ли вы предоставить некоторые цифры? для меня единственная причина, по которой этот трюк может быть быстрее, - вы просто не правильно протестировали кеширование mysql. поэтому попробуйте запустить оба запроса с помощью 'SQL_NO_CACHE', чтобы увидеть оригинальную производительность каждого из них. – Alex

+0

@Barry: И используя мой запрос все еще медленно? Затем добавьте индекс в столбец 'X'. Это должно решить вашу проблему –