我有两个包含以下示例数据的表:
Table 1: `item_name`
| item_id | item_desc |
| 1 | apple |
| 2 | orange |
| 3 | banana |
| 4 | grape |
| 5 | mango |
Table 2: `user_items`
| user_id | item_id |
| 127 | 1 |
| 127 | 2 |
| 127 | 4 |
| 128 | 1 |
| 128 | 5 |
我正在尝试使用以下查询选择 user_id 127 和 128 具有的每个 item_id 的总数,以及相应的 item_desc:
SELECT IFNULL(COUNT(ui.user_id), 0) AS total, in.item_desc
FROM user_items AS ui
RIGHT OUTER JOIN item_name AS in
ON ui.item_id = in.item_id
WHERE ui.user_id IN (127, 128)
GROUP BY ui.item_id
ORDER BY total DESC
上面查询的结果是:
| total | item_desc |
| 2 | apple |
| 1 | orange |
| 1 | grape |
| 1 | mango |
但它不包括 item_id 3,banana,我想用 RIGHT OUTER JOIN 检索它。我希望得到如下所示的结果:
| total | item_desc |
| 2 | apple |
| 1 | orange |
| 1 | grape |
| 1 | mango |
| 0 | banana |
有什么方法可以修改查询以得到上述预期结果吗? 感谢您的宝贵时间。
最佳答案
您在使用计数的查询中出现了一点错误。这行得通。
select count(ui.item_id) as total, in.item_desc
from item_name `in`
left join user_items ui on ui.item_id = in.item_id
and ui.user_id in (127, 128)
group by
in.item_desc
order by total desc
关于mysql - 如何使用 Outer Join 和 Group By 在查询中包含 NULL 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8662833/