我正在使用标签数据库,并且想知道如何构建查询以获取标签列表,并标记应用于给定项目的每个标签,如下所示:
Table 1
item name | item ID
---------------------
One | 1
Two | 2
Three | 3
Table 2
tag name | tag ID
--------------------
Tag1 | 1
Tag2 | 2
Tag3 | 3
Mapper
tag ID | item ID | map ID
--------------------------------
1 | 1 | 1
1 | 3 | 2
3 | 1 | 3
Tags for item One
tag name | is_tagged
-------------------------------
Tag1 | *
Tag2 |
Tag3 | *
我怎样才能做到这一点?
最佳答案
这是一种简单的方法:
select t.tagname,
(case when exists (select 1
from mapper m join
items i
on m.item_id = i.item_id
where i.item_name = 'One' and
m.tag_id = t.tag_id
)
then '*' else ''
end) as is_tagged
from tags t;
您也可以使用
left join
编写此代码:select t.tagname,
(case when i.item_id is not null then '*' else ''
end) as is_tagged
from tags t left join
mapper m
on m.tag_id = t.tag_id left join
items i
on m.item_id = i.item_id and i.item_name = 'One'