【发布时间】:2012-10-23 23:56:36
【问题描述】:
当您在IN 子句为空的情况下执行 SQL 查询时会发生什么?
例如:
SELECT user WHERE id IN ();
MySQL 会按预期处理这种情况(即始终为假),如果不是,我的应用程序在动态构建 IN 子句时如何处理这种情况?
【问题讨论】:
-
id 列值显然不在空集中,因为空集中没有任何内容。此外,事实证明这是不正确的语法。 sqlfiddle.com/#!2/a2581/2412
-
如果您“构建”(或确定)一个空的
IN子句,请不要执行查询。嘘! -
@LoztInSpace 即使有 OR 条件,单个查询也很有用,而不是用另一种语言编写查询构建器逻辑。因此,令人讨厌的是 IN 不处理空列表。 (:ids is null or id in :ids) 会很棒,而不是在 :ids 为 null 时使用另一种语言省略 IN 部分。评估为 false 会很好,而不是抛出语法错误。