由于我的知识有限,不太确定如何解决这个问题。
然而 - 我有三张桌子。
类别表。
category_id, category_name
1 | ABC
2 | DEF
3 | GHI
链接表。
link_id, category_id, link_name
1 | 1 | Bla
2 | 1 | Bla bla
3 | 2 | Bla Bla Bla
详细信息表
details_id, link_id, details_status (then some more irrelevant fields)
1 | 1 | 0
2 | 1 | 1
3 | 1 | 0
4 | 2 | 1
5 | 3 | 1
状态字段为0,1或2.
我想要做的是选择给定类别的链接列表。很简单。
我想要做的是加入详细信息表,以便在找到给定状态时突出显示我的链接。
例如,在类别'ABC'中,details_id的1和3是状态0,当运行查询时返回类别'ABC'的链接列表。
我的查询会返回类似状态where details_status=0
所以对于category_id 1,我想得到: link_id,link_name,status_count
产量:
1 | bla | 2
2 | bla bla | 0
3 | bla bla bla | 0
答案 0 :(得分:2)
select links.link_id, links.link_name,
sum(if(details.details_status=0,1,0)) as status_count
from links
inner join category on links.category_id = category.category_id
inner join details on details.link_id = links.link_id
where category.category_name = 'ABC'
group by links.link_id, links.link_name
IF语句包含3个参数。第一个是评估的逻辑表达式。第二个是表达式为true时的返回值。第三个是表达式为false时的返回值。所以,在这里,我们正在检查details_status是否为0.如果是,我们要返回1,否则为0.然后,我们将其包含在SUM函数中以获取我们正在寻找的总数。 / p>
答案 1 :(得分:1)
听起来类别表与您的问题无关。
要获得您要求的输出,请尝试以下操作:
select l.link_id, link_name, count(d.link_id)
from links l
left join details d on d.link_id = l.link_id and details_status = 0
group by 1, 2;
实现这项工作的关键是将details_status = 0
放入on
子句,而不是 where
子句。
如果您愿意,可以轻松地将此查询与类别表联系起来。