【发布时间】:2020-09-03 18:22:19
【问题描述】:
编写查询以根据多个标签字段条件过滤资源列表,例如:WHERE tag_name != fabric or tag_name = user。
基本上,我有分配了多个标签{名称:值}的资源列表。需要一种方法来查询基于标签字段 {name & value} 的资源过滤列表,并具有各种操作,如相等和不相等的值。
三个表:
- 资源表:Res_ID、Res_Name
- 标签表:Tag_ID、Tag_Name、Tag_Value
- Ref_Res_Tag:Res_ID、Tag_ID
我提出的问题:
查询 1:
SELECT "sample_t"."name", "tag_t"."tag_name" from "sample" as sample_t
LEFT JOIN "ref_sample_tag" as ref_sample_tag_t on "ref_sample_tag_t"."from" = "sample_t"."uuid"
LEFT JOIN "tag" as tag_t on "tag_t"."uuid" = "ref_sample_tag_t"."to"
WHERE ("tag_t"."tag_name" != 'fabric');
Q1 的问题:此查询为上述查询返回 Sample1、Sample2。 期望:{Empty}:结果应该是空的,因为所有资源都被标记为结构。
查询 2:
SELECT "sample_t"."name" FROM "sample" as sample_t
WHERE sample_t.uuid NOT IN
(SELECT ref_sample_tag.FROM from ref_sample_tag
LEFT JOIN tag AS tag_t ON ref_sample_tag.to = tag_t.uuid WHERE tag_t.tag_name = 'fabric')
结果:{}:没有资源全部标记为结构。预期结果。
问题:如何使用多个不同的标签字段条件,如((tag_name != 'fabric') or (tag_name = 'user'))
如果需要更多详细信息,请告诉我。
【问题讨论】:
-
Postgresql 和 mysql 是两种不同的数据库产品,具有不同的 sql 实现。删除了冲突的产品标签。请添加您使用的那个。
-
我同时使用两种 SQL 变体。 MySQL 和 Postgres。这两种变体解决方案中的任何一种都适合我。
-
示例数据最好显示为formatted text,以便在测试答案时可以复制使用。请参阅here,了解有关如何创建漂亮表格的一些提示。
-
谢谢@a_horse_with_no_name。那是错字,我已经更新了用户。在查询 2:WHERE tag_name != fabric 或 tag_name = abc 中,这不起作用。预期结果:{} - 空列表,因为所有资源都标记为 fabric。
标签: sql postgresql