返回具有特定标记的行

时间:2017-02-03 13:05:46

标签: mysql sql

我有3张桌子

选 listtags listing_listtag

列表可以分配多个标签,这些标签存储在listing_listtag中,其中包含列表和列表标签表的外键

我有一个问题,就是只选择一个与其关联的2个标签的列表。

我有这个问题:

select *
from `listtags`
    inner join `listing_listtag` on `listtags`.`id` = `listing_listtag`.`tag_id`
where `listing_listtag`.`listing_id` = 5
   and `slug` = "delivery"
   AND slug = "wireless-internet" 

并且它什么都不返回。如果我将最后一个AND设为OR,它现在返回

enter image description here

我希望查询只返回一行,其中listing_id为5,我该怎么做?

2 个答案:

答案 0 :(得分:1)

这是一种方法:

select ?.listing_id
from listtags lt inner join
     listing_listtag llt
     on lt.id = llt.tag_id
where llt.listing_id = 5 and
      ?.slug in ('delivery', 'wireless-internet')
group by ?.listing_id
having count(*) = 2;

?用于包含该列的表的表别名。

注意:如果数据可能有重复项,请使用count(distinct slug)

答案 1 :(得分:0)

你只需要一对括号:

select *
from `listtags`
inner join `listing_listtag` on `listtags`.`id` = `listing_listtag`.`tag_id`
where `listing_listtag`.`listing_id` = 5
and (`slug` = "delivery"
or slug = "wireless-internet")