IF -condition ERROR 1241(21000):操作数应包含1列

时间:2014-11-14 05:14:50

标签: mysql

如何解决?

 mysql> SELECT  IF(1,(SELECT * FROM zd LIMIT 1 ) ,(SELECT *  FROM zd LIMIT 3) );
ERROR 1241 (21000): Operand should contain 1 column(s)
mysql>

谢谢。

1 个答案:

答案 0 :(得分:4)

错误代码比起初看起来更具信息量。

Operand should contain 1 columns

在您的示例中,IF运算符,而1(SELECT * FROM zd LIMIT 1 )(SELECT * FROM zd LIMIT 3)操作数

IF语句有三个参数:布尔值,如果布尔值为true则返回标量值;如果布尔值为假则返回标量值。

您的选择子查询每个都返回一行。您必须只返回一个值,如下所示:

SELECT IF(1,(SELECT col1_name FROM zd LIMIT 1 ) ,(SELECT col2_name  FROM zd LIMIT 1) )

您可以将col1_namecol2_name替换为要从中获取数据的列。

====

现在我再次阅读了你的问题,我发现你实际上要做的是限制条件。我会用PHP或者你正在查询数据库的任何语言来做,如果可能的话:

$limit = $bool ? 1 : 3;
$mysql->prepare("SELECT * FROM zd LIMIT $limit");
$mysql->execute();
$result = $mysql->fetch(PDO::FETCH_ASSOC)

我不确定是否有办法在没有变量的情况下在mysql中有条件地设置限制。