mySQL - вручную добавить идентификатор в "WHERE column_id IN" (подзапрос...)
Это странный запрос, который мне раньше не приходилось писать, но у меня есть ситуация, когда мне нужно вручную добавить одну дополнительную переменную в оператор WHERE IN. Этот пример лучше объяснит мою проблему.
SELECT * FROM user WHERE id IN (SELECT user_id FROM order WHERE sub_total > 150)
В моей конкретной ситуации мне нужно вручную добавить еще один user_id к подзапросу оператора IN, независимо от того, имеют ли они промежуточный итог заказа больше 150.
Я попытался сделать следующее, и думал, что это будет работать, но он возвращает странные результаты и не работает...
SELECT * FROM user WHERE id IN (SELECT user_id FROM order WHERE sub_total > 150) OR WHERE id = 1234
По сути, я хочу выполнить подзапрос, чтобы вернуть все идентификаторы пользователя, которые соответствуют условию, а также включить тот, который я указал сам. Каков наилучший способ сделать это? Я пытался найти его, но не нашел ничего, чтобы выполнить это требование.
2 ответа
Используйте оператор ИЛИ:
SELECT * FROM user
WHERE id IN (SELECT user_id FROM order WHERE sub_total > 150)
OR id = 123
OR id IN (345,567)
В основном оператор IN, как X IN (1,2,3)
это ярлык для:
X = 1
OR
X = 2
OR
X = 3
In
не так хорошо, если у вас возвращаются нули...
Используйте существует, если вы хотите результаты из подзапроса
SELECT *
FROM user u1
WHERE exists (SELECT 1
FROM order o2
WHERE o2.sub_total > 150
AND u1.id = o2.user_id)
OR id IN (<list of id's to include>) -- IN is fine for an actual list
Также обратите внимание на WHERE
появляется один раз за запрос. OR WHERE
совершенно неправильно