mySQL - 手动添加ID到“WHERE column_id IN”(子查询...)

问题描述:

这是一个奇怪的查询,我没有写过,但我有一个情况,我需要手动添加一个额外的变量一个“WHERE IN”语句。这个例子会更好地解释我的问题。mySQL - 手动添加ID到“WHERE column_id 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

基本上,我想子查询返回的所有用户ID相匹配的条件AND还包括我自己指定的条件。 完成此操作的最佳方法是什么?我试过查找它,但没有发现任何东西来满足这个要求。

+0

什么是'sub_total'和? –

+0

你为什么不在你的子查询中使用union? (SELECT user_id FROM order WHERE sub_total> 150 UNION SELECT FROM DUAL)' – Hatik

使用或操作:

SELECT * FROM user 
WHERE id IN (SELECT user_id FROM order WHERE sub_total > 150) 
    OR id = 123 
    OR id IN (345,567) 

基本上像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是完全错误的

+1

我在这[SQL Filddle](http://sqlfiddle.com/#!9/5c9248/1)中看不到任何区别, - 在第一种情况下不存在空值,在第二种情况下存在空值返回,结果完全相同。请解释为什么'IN'不太好,在这种情况下'EXISTS'好得多? – krokodilko

+0

@krokodilko [这是基于Oracle](http://www.techrepublic.com/article/oracle-tip-understand-how-nulls-affect-in-and-exists/),但适用于所有类型的SQL 。当子查询返回一个大数据集时,“EXISTS”的其他优点就会起作用。 – JohnHC

+0

那么,请仔细阅读这篇文章**。作者说:* IN和EXISTS在逻辑上是相同的。 .....但是,当逻辑被逆转为使用NOT IN和NOT EXISTS **时会出现**问题,这会返回不同的行集...... *。 OP在他的查询中使用'IN',没有'NOT IN'可能导致NULL的问题。 – krokodilko