You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQLite中关联多表并按行检索关键词表?

嘿,这事儿不难,咱们先理清楚表之间的关联逻辑,再给你写几种常用的SQL查询语句!

首先,你的三个表是典型的多对多关联结构:products和keywords通过中间表keywords_products建立关联——products.product_rec_id对应keywords_products.product_rec_id,keywords.keyword_rec_id对应keywords_products.keyword_rec_id。接下来根据不同的检索需求,咱们来写对应的SQL:

1. 检索所有产品及其对应的单个关键词(每行一个产品-关键词配对)

这个查询会把每个产品的每个关键词单独占一行,适合需要逐行处理关键词的场景:

SELECT p.product_rec_id, p.name, k.keyword
FROM products p
JOIN keywords_products kp ON p.product_rec_id = kp.product_rec_id
JOIN keywords k ON kp.keyword_rec_id = k.keyword_rec_id
ORDER BY p.product_rec_id;

2. 检索所有产品及其合并后的关键词(每行一个产品,关键词用逗号分隔)

如果想把同一个产品的所有关键词合并到一行展示,用SQLite的GROUP_CONCAT函数就行:

SELECT p.product_rec_id, p.name, GROUP_CONCAT(k.keyword, ', ') AS keywords
FROM products p
JOIN keywords_products kp ON p.product_rec_id = kp.product_rec_id
JOIN keywords k ON kp.keyword_rec_id = k.keyword_rec_id
GROUP BY p.product_rec_id, p.name
ORDER BY p.product_rec_id;

3. 根据关键词反向检索对应的产品

如果要找包含某个特定关键词的所有产品,只需要加个WHERE条件:

SELECT p.product_rec_id, p.name
FROM products p
JOIN keywords_products kp ON p.product_rec_id = kp.product_rec_id
JOIN keywords k ON kp.keyword_rec_id = k.keyword_rec_id
WHERE k.keyword = '你的目标关键词'
ORDER BY p.product_rec_id;

4. 包含无关键词的产品(左连接)

上面的查询都是内连接(JOIN),只会返回有关键词的产品。如果想保留所有产品,哪怕它没有任何关键词,用LEFT JOIN:

SELECT p.product_rec_id, p.name, COALESCE(GROUP_CONCAT(k.keyword, ', '), '无关键词') AS keywords
FROM products p
LEFT JOIN keywords_products kp ON p.product_rec_id = kp.product_rec_id
LEFT JOIN keywords k ON kp.keyword_rec_id = k.keyword_rec_id
GROUP BY p.product_rec_id, p.name
ORDER BY p.product_rec_id;

这里用COALESCE函数把NULL(无关键词的情况)替换成了“无关键词”,让结果更友好。

内容的提问来源于stack exchange,提问作者nDelphi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:09:55