如何解决使用 SQLite SELECT 使用连接表将连接表列合并为每个类别的一行
我正在使用 sqlite 并且有三个表(这些表中有更多数据 - 此处缩写):
类别可以有许多与之关联的项目,也可以没有。 商品必须至少有 1 个类别,并且可能属于 1 个以上的类别。
示例:
(Categories)
| id | name | description |
|----|--------|---------------------------------|
| 1. | wet. | something associated with water |
| 2. | dry. | something else |
| 3. | Metal. | steel,copper |
(Items)
| id. | name. | status |
|-----|---------|------------|
| 11. | river. | north fork |
| 12. | lake. | big |
| 13. | river. | south fork |
| 14. | desert. | mojave |
| 15. | car. | ford |
| 16. | truck. | chevy |
(Reference)
| id | cat_id. | item_id |
|----|---------|---------|
| 21 | 1 | 11 |
| 22 | 1 | 12 |
| 23 | 2 | 14 |
| 24 | 3 | 15 |
| 25 | 3 | 16 |
使用以下内容:
SELECT c.name,(i.name || "-" || i.status) as Related from Items as i
join Categories c where c.id = cat.id
我得到的东西是这样的:
| c.name | Related |
|---------|--------------------|
| wet | river - north fork |
| wet | lake - big |
| wet | river - south fork |
| dry | desert - mojave |
| Metal | car - ford |
| Metal | truck - chevy |
我需要的是
| c.name | Related |
|--------|----------------------------------------------------|
| wet | river - north fork,lake - big,river - south fork |
| dry | desert - mojave |
| Metal | car - ford,truck - chevy |
一个类别与联结表中的引用项目匹配并合并在“相关”列中(在示例中以逗号分隔)。
如何在 sqlite 中获得此结果?
解决方法
您可以按如下方式使用 FontFileFinder fontFileFinder = new FontFileFinder();
List<URI> fonts = fontFileFinder.find();
for (URI font : fonts) {
logger.info("Font: " + font.getPath());
}
:
group_concat
,
你可以这样写查询:
select c.name,group_concat(i.name || '-' || i.status,',') as Related
from Items i join
Categories c
on c.id = i.cat_id
group by c.name;
注意事项:
-
JOIN
应始终将ON
用于JOIN
条件。 - 在 SQL 中对字符串使用单引号。
- 默认分隔符是
','
。您似乎想要','
,因此您需要第二个参数。 - 你需要
GROUP BY
。
您必须先将 Categories
连接到 Reference
,然后再连接到 Items
,使用 LEFT
连接,以防万一某个类别没有任何相关项目,然后与GROUP_CONCAT()
:
SELECT c.name,GROUP_CONCAT(i.name || ' - ' || i.status,') Related
FROM Categories c
LEFT JOIN Reference r ON r.cat_id = c.id
LEFT JOIN Items i ON i.id = r.item_id
GROUP BY c.id,c.name
参见demo。
结果:
| name | Related |
| ----- | ------------------------------ |
| wet | river - north fork,lake - big |
| dry | desert - mojave |
| metal | car - ford,truck - chevy |
,
forpas 的回应正是我所需要的。谢谢-
SELECT c.name,c.name
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。