Mysql 我可以在SQL查询中使用“=ALL”吗?

Mysql 我可以在SQL查询中使用“=ALL”吗?,mysql,sql,Mysql,Sql,我试图使用一个参数和子查询的一组结果来使用“=ALL”,如下所示: SELECT table.something FROM Table t WHERE t.param = ALL (... sub-query...) 这可能吗?因为我知道结果应该是什么,我根本没有得到任何结果…是的,有可能: 如果您没有得到预期的结果,我猜查询中存在问题。按照目前的编写方式,子查询中的所有结果都必须匹配t.param的值,这在上下文中没有太多意义。这是使用的一般形式,我没有听说过所有: 有关此文件的名称表: I

我试图使用一个参数和子查询的一组结果来使用“=ALL”,如下所示:

SELECT table.something
FROM Table t
WHERE t.param = ALL (... sub-query...)
这可能吗?因为我知道结果应该是什么,我根本没有得到任何结果…

是的,有可能:


如果您没有得到预期的结果,我猜查询中存在问题。按照目前的编写方式,子查询中的所有结果都必须匹配t.param的值,这在上下文中没有太多意义。

这是使用的一般形式,我没有听说过所有:

有关此文件的名称表:

ID | firstname 
---+----------
 1 | alice
 2 | bob
 3 | jane
 4 | sue
查询:

SELECT * FROM names WHERE firstname in ('alice', 'jane');
将返回此文件:

ID | firstname 
---+----------
 1 | alice
 3 | jane

只有当子查询只返回一个值时才有意义

如果子查询返回多个值,则不会得到任何匹配行。没有任何值可以同时等于其他两个值

例如,如果子查询返回1和2,并且您的表包含值2,那么它将不匹配,因为值2不同时等于1和2


因此,将ALL关键字与=运算符一起使用实际上是毫无用处的。我认为您应该改用ANY关键字或IN运算符。

使用这种语法,您将只得到param等于子查询返回的所有元素的结果。t.param是什么?它不是必须是一个数组或什么的吗?它可能有助于说明您对某些给定输入的期望,因为它不清楚您期望的是什么。但是它是否将我的参数与子查询的所有结果匹配?是的,如果子查询返回6行1,6,2,6,11,56,然后,所有带有这些参数值的表记录都将被返回。就像RaymondHettinger的回答一样,这相当于任何,而不是全部。哇-全部完全超过了我。这可能对我试图实现的几件事情有用。只有在子查询只返回单个值时才有意义。-请你澄清一下你的意思好吗。考虑:从MyTable t中选择t.ID,其中t.ID=ALL从MyTable t2中选择t2.ID,其中t2.ID=t.ID;-子查询真的只返回一个值吗?@onedaywhen:我不知道您发现不清楚的是什么,您必须指定。。。是的,在您的示例中,子查询只返回一个值。子查询取决于每个特定行的值,因此它将对t中的每一行执行一次,每次t2.ID的值不能等于t.ID,因为这是您在条件中指定的值。它将对t中的每一行执行一次,每次都是t2.ID的值-如果MyTable中的ID有三个不同的值,那么同一子查询将返回三个不同的值,对吗?这与只返回一个值完全不同,你不觉得吗?@onedaywhen:不,不是。仅返回单个值与始终返回相同的单个值不同。
ID | firstname 
---+----------
 1 | alice
 3 | jane