SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s). SQL查询

5
我有两个表,分别命名为“data”和“regions”。我想获取与数据相关的区域记录作为区域记录的项目。
区域
RegionId -- Name -- ParentId

数据

DataId -- RegiondId -- Url

样例结果:

[
{Name:"a", items:[{...},{...},{...}, ...]},
{Name:"b", items:[{...},{...},{...}, ...]},
]

我使用了这个查询。
SELECT *,(
    SELECT * 
    FROM data 
    WHERE data.RegionId=regions.RegionId
) AS items 
FROM regions 
WHERE regions.ParentId=1

但是我遇到了SQLSTATE[21000]: Cardinality violation: 1241 Operand should contain 1 column(s)的问题。

重要提示:地区记录之间存在父子关系。当我写下这个条件data.RegionId=regions.Id时,它必须返回其子项的RegionIds匹配项。


您正在尝试选择多行而不是单列。 - 1000111
你能指导一个更好的解决方案吗? - Ali
2个回答

5

在select列表中的子查询必须返回一列和1行(单个值),但是您在那里使用了select *,因此出现了错误消息。

您的查询应该写成一个简单的内部连接,而不是一个子查询:

SELECT *
FROM regions 
INNER JOIN data ON data.RegionId=regions.RegionId
WHERE regions.ParentId=1

我认为它不会像示例中提到的那样返回结果,你确定吗? - Ali
期望的结果以json格式呈现,这只是查询结果集的不同表示。您可以在应用逻辑中转换结果集,或查看MySQL的有限json支持函数,将结果集转换为所需的格式。 - Shadow

5

我尝试一次性插入多行数据时遇到了这个错误。我将查询参数收集到一个数组中,并拼接占位符问号。当我有如下内容时报错:

INSERT INTO table (...) VALUES ((...),(...),(...))

当我应该拥有的是什么时

INSERT INTO table (...) VALUES (...),(...),(...)

请注意多余的括号导致了错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接