如何修复 SQLSTATE[21000]:基数违规:1241 操作数应包含 1 列

Posted

技术标签:

【中文标题】如何修复 SQLSTATE[21000]:基数违规:1241 操作数应包含 1 列【英文标题】:How to fix SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s) 【发布时间】:2020-08-03 16:48:44 【问题描述】:

运行以下代码时出现 sql 错误。我是 SQL 的新手。因此,如果这是一个愚蠢的问题,请忽略。以下是我的 SQL 查询,用于根据用户的位置返回一些用户

SELECT DISTINCT e.* FROM users u WHERE (u.id IN (SELECT id, 
                                            (6371 * acos( 
                                                        cos( radians(9.9894229) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(76.57897489999999) ) + sin( radians(9.9894229) ) * sin( radians( latitude ) ) 
                                                    ) 
                                            ) 
                                            AS distance 
                                            FROM users_geo_data 
                                            HAVING distance < 20
                                        )) ORDER BY u.time_created desc, u.id desc LIMIT 10 

但是我说错了

SQLSTATE[21000]:基数违规:1241 操作数应包含 1 列

PS:

    由于平台内置db架构,我只能通过where子句使用radius search子查询。 另一件事是我可能必须根据距离(自定义)或基于 time_created(默认)对搜索结果进行排序

【问题讨论】:

【参考方案1】:

问题是IN 子查询返回多于一列。因此,将距离计算移至where 子句:

u.id IN (SELECT id
         FROM users_geo_data 
         WHERE (6371 * acos( 
                            cos( radians(9.9894229) ) * cos( radians( latitude ) ) * cos( radians( longitude ) - radians(76.57897489999999) ) + sin( radians(9.9894229) ) * sin( radians( latitude ) ) < 20
       )

【讨论】:

戈登,感谢您的修复。那行得通。但是如果我想根据计算的距离对用户进行排序怎么办? @mohammedaqeel 。 . .那将是一个非常不同的问题,应该作为问题提出。您无法通过在where 子句中进行过滤来做到这一点。您需要使用 JOIN 或相关子查询。 戈登,谢谢。正如我在主要问题中所说,由于平台数据库的特定架构,我不能执行 JOIN 子句。以前我曾经使用相同的查询来执行此操作,然后按距离排序。你能帮我处理相关的子查询吗?提前致谢。

以上是关于如何修复 SQLSTATE[21000]:基数违规:1241 操作数应包含 1 列的主要内容,如果未能解决你的问题,请参考以下文章

选择子句上的 CASE 子句抛出 'SQ​​LCODE=-811, SQLSTATE=21000' 错误

修复了Innodb完整性约束违规:1452 [重复]

SQLSTATE [23000]:完整性约束违规:1062 键“users_melli_unique”的重复条目“0430142821”

SQLSTATE [23502]:非空违规:7 错误 - laravel

SQLSTATE [23502]:非空违规:7 Laravel API 错误

SQLSTATE [23000]:完整性约束违规:1048 laravel 5.7