Есть такой запрос:
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, например? Если да, то напишите, пожалуйста, код.