SELECT标签和项目的关联

时间:2017-06-02 02:26:17

标签: mysql sql

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

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            | *

我该怎么做?

2 个答案:

答案 0 :(得分:2)

这是一个简单的方法:

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 s:

来撰写
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'

答案 1 :(得分:0)

您可以通过 Mapper 表左右连接表2 表1 ,然后测试表2的列表示NULL个值。例如:

SELECT 
   TagName, ItemID IS NOT NULL AS IsTagged
FROM 
   Table2 
   LEFT JOIN 
   (SELECT TagID, ItemID 
   FROM Mapper INNER JOIN Table1 
   WHERE ItemName = 'One') AS tmpQry
   USING(TagID);
相关问题