我在进行 Sqlite 查询时遇到问题,简单来说一下我的情况:假设我有这样的表
Project Facility_category Facility_item Project_Facility_Relation
-------- -------- -------- ---------
id| name id | name id | name id | project_id | category_id | item_id
----------- --------------------- --------------------- ----------------
1 | Building A 1 | Relax Outdoor 1 | Square 1 | 1 | 1 | 1
2 | Apartment B 2 | School 2 | Kid Zone 2 | 1 | 1 | 2
3 | Swimming pool 3 | 1 | 1 | 3
4 | High School A 4 | 1 | 2 | 4
5 | University B 4 | 1 | 2 | 5
现在我做了这样的查询:
SELECT pr.id, pr.name,
(
SELECT DISTINCT json_group_array(
json_object('id', qu.id,
'name', qu.name,
'item',
(
SELECT DISTINCT json_group_array(json_object('id', ifi.id, 'name', ifi.name))
FROM Project_Facility_Relation fa
INNER JOIN Facility_item ifi ON ifi.id = fa.facility_id
where fa.project_id = pr.id AND fa.qualily_id = qu.id
)
))
FROM Project_Facility_Relation fa
INNER JOIN Facility_category qu ON qu.id = fa.qualily_id
where fa.project_id = pr.id
) as Category
FROM Project pr
GROUP BY pr.id
问题出在我的结果中,类别列根据 Project_Facility_Relation 中存在的 Facility_category 数量运行多次。在本例中,“Relax Outdoor”在 Facility_category 中出现了 3 次,因此在 Category 结果中,有 3 个元素重复
Project
--------
id | name | Category
-----------
1 | Building A | [
{
"id": "1",
"name": "Relax Outdoor",
"item": [
{
"id": "1",
"name": "Square",
},
{
"id": "2",
"name": "Kid Zone",
},
{
"id": "3",
"name": "Swimming pool",
},
]
},
{
"id": "1",
"name": "Relax Outdoor",
"item": [
{
"id": "1",
"name": "Square",
},
{
"id": "2",
"name": "Kid Zone",
},
{
"id": "3",
"name": "Swimming pool",
},
]
},
{
"id": "1",
"name": "Relax Outdoor",
"item": [
{
"id": "1",
"name": "Square",
},
{
"id": "2",
"name": "Kid Zone",
},
{
"id": "3",
"name": "Swimming pool",
},
]
},
{
"id": "2",
"name": "School",
"item": [
{
"id": "4",
"name": "High School A",
},
{
"id": "5",
"name": "University B",
},
]
},
{
"id": "2",
"name": "School",
"item": [
{
"id": "4",
"name": "High School A",
},
{
"id": "5",
"name": "University B",
},
]
}
]
请帮助我,告诉我我错在哪里?非常感谢
SELECT pr.id, pr.name,
(
SELECT json_group_array(
json_object('id', qu.id,
'name', qu.name,
'item',
(
SELECT json_group_array(json_object('id', ifi.id, 'name', ifi.name))
FROM Project_Facility_Relation fa
INNER JOIN Facility_item ifi ON ifi.id = fa.item_id
WHERE fa.project_id = pr.id AND fa.category_id = qu.id
)
))
FROM Facility_category qu
WHERE EXISTS (
SELECT 1
FROM Project_Facility_Relation fa
WHERE fa.qualily_id = qu.id AND fa.project_id = pr.id
)
) as Category
FROM Project pr;
您似乎在
Category
列中获得了重复的条目,因为您的内部子查询与外部查询没有正确关联