MySQL的连接中的Where子句?

时间:2011-08-24 14:49:33

标签: mysql

由于我的知识有限,不太确定如何解决这个问题。

然而 - 我有三张桌子。

类别表。

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

2 个答案:

答案 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子句。

如果您愿意,可以轻松地将此查询与类别表联系起来。