我有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,它现在返回
我希望查询只返回一行,其中listing_id为5,我该怎么做?
答案 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")