MySQL GROUP_CONCAT函数使用报错:Operand should contain 1 column(s)
SQL语句错误分析与修正
错误原因
你遇到的Operand should contain 1 column(s)错误,根源在于MySQL不支持对多列元组直接使用BETWEEN运算符。BETWEEN要求左右两侧都是单个值(或单列表达式),而你写的(X,Y,Z) BETWEEN (?,?,?) AND (?,?,?)是多列行构造器的比较,数据库无法解析这种格式,因此抛出错误。另外你原语句末尾的多余大括号{也是语法错误,需要删除。
修正后的SQL语句
方案一:使用行构造器的范围比较(推荐,符合主键组合逻辑)
SELECT GROUP_CONCAT(DISTINCT SHIPMENTS) AS CUSTOMSREQUEST FROM CUSTOMS WHERE (X,Y,Z) >= (?,?,?) AND (X,Y,Z) <= (?,?,?) AND SHIPMENTS != ?
方案二:拆分为单列范围条件(兼容性更强)
SELECT GROUP_CONCAT(DISTINCT SHIPMENTS) AS CUSTOMSREQUEST FROM CUSTOMS WHERE X >= ? AND X <= ? AND Y >= ? AND Y <= ? AND Z >= ? AND Z <= ? AND SHIPMENTS != ?
说明
两种方案都能实现你的需求:
- 筛选出X、Y、Z同时处于指定上下限范围内的数据
- 排除指定的
SHIPMENTS字符串 - 通过
GROUP_CONCAT(DISTINCT)将去重后的SHIPMENTS值合并为单列结果CUSTOMSREQUEST
内容的提问来源于stack exchange,提问作者TonyFalk
相关产品推荐
相关产品推荐

