如何解决?
mysql> SELECT IF(1,(SELECT * FROM zd LIMIT 1 ) ,(SELECT * FROM zd LIMIT 3) );
ERROR 1241 (21000): Operand should contain 1 column(s)
mysql>
谢谢。
答案 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_name
和col2_name
替换为要从中获取数据的列。
====
现在我再次阅读了你的问题,我发现你实际上要做的是限制条件。我会用PHP或者你正在查询数据库的任何语言来做,如果可能的话:
$limit = $bool ? 1 : 3;
$mysql->prepare("SELECT * FROM zd LIMIT $limit");
$mysql->execute();
$result = $mysql->fetch(PDO::FETCH_ASSOC)
我不确定是否有办法在没有变量的情况下在mysql中有条件地设置限制。