我有两张名为'数据'和'地区'。我希望将包含数据相关记录的区域作为区域记录项。
区域
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)
。
重要提示:Region的记录之间存在父关系。所以当我写这个条件data.RegionId=regions.Id
时,它必须返回该项目与其孩子的匹配RegionIds
。
答案 0 :(得分:2)
选择列表中的子查询必须返回一列和一行(单值),但那里有select *
,因此出现错误消息。
您的查询应该编写为简单的内部联接而不是子查询:
SELECT *
FROM regions
INNER JOIN data ON data.RegionId=regions.RegionId
WHERE regions.ParentId=1
答案 1 :(得分:0)
尝试一次插入多行时出现此错误。我将查询参数收集到一个数组中,并连接了占位符问号。当我有类似的东西时出现错误
INSERT INTO table (...) VALUES ((...),(...),(...))
当我应该拥有的时候
INSERT INTO table (...) VALUES (...),(...),(...)
请注意引起错误的多余括号。