我正在使用标签数据库,并且想知道如何构建查询以获取标签列表,并标记应用于给定项目的每个标签,如下所示:

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'

10-05 17:47
查看更多