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

如何编写SQL查询筛选同时包含指定多标签的记录ID

筛选同时拥有指定标签的车辆ID的通用SQL写法

现有cars和car_tags两张关联表,要找出同时带指定标签(比如标签3和4)的车辆ID,还要让SQL能适配任意数量的标签筛选。你之前写的聚合标签的查询可以改造一下,或者用更高效的分组筛选方案:

高效通用方案(推荐)

SELECT cars.id
FROM "cars"
INNER JOIN "car_tags" ON "car_tags"."car_id" = "cars"."id"
WHERE car_tags.tag_id IN (3, 4) -- 这里换成你要的标签列表,比如(3,4,5)
GROUP BY cars.id
HAVING COUNT(DISTINCT car_tags.tag_id) = 2; -- 数字要和标签数量一致,比如3

用法很直白:要筛几个标签,就把IN里的列表换成对应的标签ID,后面的数字改成标签的总数就行。加DISTINCT是防止同一辆车重复关联同一个标签,导致计数不准。

基于你原查询的改造版

如果想保留聚合标签的输出,同时筛选符合条件的记录,可以这么改:

SELECT cars.id, array_agg(car_tags.tag_id) AS tag_ids
FROM "cars"
INNER JOIN "car_tags" ON "car_tags"."car_id" = "cars"."id"
GROUP BY cars.id
HAVING array_agg(car_tags.tag_id) @> ARRAY[3, 4]::INT[]; -- 换成你要的标签数组,比如ARRAY[3,4,5]

这个用了PostgreSQL的数组包含判断,只要聚合后的标签数组包含所有指定标签,就会被筛选出来,同样支持任意数量的标签。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 07:28:19