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 совершенно неправильно

Другие вопросы по тегам