mysql - SQL,左连接,分组依据,计数(*)作为haspicture?

标签 mysql sql count group-by left-join

好的,我有一些需要做的具体查询。

我有一个表“描述”,我需要查找是否有链接到该描述的图片,为此,我与表"file"进行了左连接。

SELECT D.id, COUNT(*) as haspicture
FROM `description`as D 
LEFT JOIN `files` as F ON D.id=F.id  
GROUP BY D.id

它工作得很好,但是该列有图片包含它应该包含的内容,即找到的文件数。 如果至少附加了 1 个文件,我只想将 haspicture 设置为 1。

我需要它为 1,因为这样我就可以用不同的优先级对结果进行排序。当然,我缩短了真实的查询,我选择的不仅仅是D.id,而且还有现实中的图片。

最佳答案

您可以使用case 语句。另外,因为要小心你正在计算的内容:

SELECT D.id,
       (CASE WHEN COUNT(f.id) > 0 THEN 1 ELSE 0 END) as haspicture
FROM `description`D LEFT JOIN
     `files` F
      ON D.id = F.id  
GROUP BY D.id;

您可能会发现以下代码执行得更好,因为没有更大的 group by:

select d.id,
       (exists (select 1 from files where d.id = f.id)) as haspicture
from description d;

为了获得最佳性能,需要对files(id)建立索引。

关于mysql - SQL,左连接,分组依据,计数(*)作为haspicture?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26719048/

相关文章:

mysql - groupBy select 后计算总记录数

sql - 如何获得 Oracle 中不同记录的最高计数?

php - 在 php 中只运行一次更新查询

sql - 我如何在 MySQL 中统计选票?

sql - 在应用程序的数据库存储过程中使用 MSDB 存储过程

php - 为什么我们应该在 MySql 查询中转义双引号和 NULL?

mysql - 连接 3 个表,查询无响应

mysql - 如何在 MySql 选择查询中将 UTC 日期转换为本地时区

php - 我如何在 mysql 中编写 Group By 查询日期时间字段

java - 计数器在整数数组中不起作用