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还包括我自己指定的条件。 完成此操作的最佳方法是什么?我试过查找它,但没有发现任何东西来满足这个要求。
使用或操作:
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
是完全错误的
我在这[SQL Filddle](http://sqlfiddle.com/#!9/5c9248/1)中看不到任何区别, - 在第一种情况下不存在空值,在第二种情况下存在空值返回,结果完全相同。请解释为什么'IN'不太好,在这种情况下'EXISTS'好得多? – krokodilko
@krokodilko [这是基于Oracle](http://www.techrepublic.com/article/oracle-tip-understand-how-nulls-affect-in-and-exists/),但适用于所有类型的SQL 。当子查询返回一个大数据集时,“EXISTS”的其他优点就会起作用。 – JohnHC
那么,请仔细阅读这篇文章**。作者说:* IN和EXISTS在逻辑上是相同的。 .....但是,当逻辑被逆转为使用NOT IN和NOT EXISTS **时会出现**问题,这会返回不同的行集...... *。 OP在他的查询中使用'IN',没有'NOT IN'可能导致NULL的问题。 – krokodilko
什么是'sub_total'和? –
你为什么不在你的子查询中使用union? (SELECT user_id FROM order WHERE sub_total> 150 UNION SELECT FROM DUAL)' –
Hatik