Задать вопрос
@eugene159

Можно ли написать SQL запрос с выражением в WHERE и в SELECT, но без повторения этого выражения и без вложенного SELECT?

Есть такой запрос:
SELECT product_id, MD5(`value`) AS val
FROM modx_ms2_product_options
WHERE val = 'e59253548ffcb090ecc0cd0944afd27f'
LIMIT 10

Он не работает - выдается ошибка:
Ошибка SQL (1054): Unknown column 'val' in 'where clause'

Я знаю, что можно его переписать - обернуть в другой запрос и WHERE val написать уже во внешнем запросе. Тогда все будет работать.
Но будет ведь 2 SELECT'а (внешний и вложенный). Мне кажется, что это нехорошо для производительности.
SELECT * 
FROM (
	SELECT `product_id`, MD5(`value`) AS myhash
	FROM modx_ms2_product_options
	LIMIT 10
) AS hashtable
WHERE `myhash` = 'e59253548ffcb090ecc0cd0944afd27f'

Можно переписать по-другому - в WHERE тоже написать MD5(`value`). Но будет 2 вычисления MD5. Если вместо MD5 в запросе будет какое-то другое выражение, то это тоже будет плохо для производительности. Да и принцип DRY не соблюдается - придется править выражение и в SELECT, и в WHERE.
SELECT product_id, MD5(`value`) AS val
FROM modx_ms2_product_options
WHERE MD5(`value`) = 'e59253548ffcb090ecc0cd0944afd27f'
LIMIT 10

Можно ли этот запрос написать с одним SELECT и с одним вычислением выражения - при помощи JOIN, например? Если да, то напишите, пожалуйста, код.
  • Вопрос задан
  • 211 просмотров
Подписаться 3 1 комментарий
Подписчики вопроса 3 К ответам на вопрос (5)