mysql - 将所有记录保留在 "WHERE IN()"子句中,即使找不到

标签 mysql

我有以下 mysql 查询:

SELECT id, sum(views) as total_views
FROM table
WHERE id IN (1,2,3)
GROUP BY id
ORDER BY total_views ASC

如果在数据库中只找到id 1,3,我仍然希望出现id 2,同时total_views设置为0 .

有什么办法吗?这不能使用任何其他表。

最佳答案

此查询使用由联合组成的子查询对可能 ID 的列表进行硬编码...然后将这组 ID 左连接到包含要计算的信息的表。

即使没有出现,这也会在您的结果中保留一个 ID:

SELECT ids.id, sum(views) as total_views
FROM (
    SELECT 1 AS ID 
    UNION ALL SELECT 2 AS ID 
    UNION ALL SELECT 3 AS ID 
) ids 
LEFT JOIN table
    ON table.ID = ids.ID
GROUP BY ids.id
ORDER BY total_views ASC

或者,如果您有一个 numbers table ,您可以执行以下查询:

SELECT numbers.number, sum(views) as total_views
FROM
    numbers
    LEFT JOIN table
        ON table.ID = ids.ID
WHERE numbers.number IN (1, 2, 3)
GROUP BY numbers.number
ORDER BY total_views ASC

关于mysql - 将所有记录保留在 "WHERE IN()"子句中,即使找不到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13483448/

相关文章:

php - 根据表格的特定行指定颜色。情况

mysql - 在 mysql workbench 5.5 上定义事件名称时出现错误

php - 参数化查询 PHP/MySQL

javascript - 使用按钮删除sql行而不刷新页面

php - Kohana ORM 在选择时更改时区

java - Hibernate 生成的 MySQL 表名不同

php - 如何从表中选择并在 codeIgniter 中编辑信息

mysql - 如何在 MySQL 中列出给定表的所有索引列

java - 如何解决servlet类和jsp.file之间传递属性时出现空指针异常

mysql - 使用 UNION 连接查询结果