微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 SQLite SELECT 使用连接表将连接表列合并为每个类别的一行

如何解决使用 SQLite SELECT 使用连接表将连接表列合并为每个类别的一行

我正在使用 sqlite 并且有三个表(这些表中有更多数据 - 此处缩写):

  • 类别 - 包含项目类别(ID、名称、描述)
  • 项目 -(ID、名称、状态)
  • 参考(id、cat_id、item_id)

类别可以有许多与之关联的项目,也可以没有。 商品必须至少有 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 举报,一经查实,本站将立刻删除。