gpt4 book ai didi

mysql - 连接列上的 SQL 过滤器查询

转载 作者:太空宇宙 更新时间:2023-11-03 10:51:22 25 4
gpt4 key购买 nike

我有以下 SQL,它选择所有 ManifestoBatches 并为我提供每个批处理项目 (ManifestoItems) 的计数:

SELECT m.Id, u.UserName, m.TotalRows, m.DateCreated, count(i.Id) as Items
FROM ManifestoBatches as m
left join ManifestoItems as i on m.Id = i.BatchId
inner join AmzUsers as u on m.CreatedBy = u.Id
GROUP BY m.Id
ORDER BY Items DESC
LIMIT 0, 10

这很好用;但是,我只想计算属性 ManifesoItems.ScannerId 不等于 null 的 ManifestoItems。

所以,我尝试添加这个:

where NULLIF(i.ScannerId, '') is not null

但是,这过滤了整个结果集,只给我 ManifestoBatches,其中 ManifestoItems.ScannerId 不为空。 相反,我希望它获得所有 ManifestoBatches,但只给我一个 ManifestoItems 的计数,其中 ManifestoItems.ScannerId 不为空。

我该怎么做?

最佳答案

我认为你的问题是left join。当值不匹配时,这将生成 NULL。但听起来您在该字段中仍然有 NULL 值。这可能会解决您的问题:

SELECT m.Id, u.UserName, m.TotalRows, m.DateCreated, count(i.Id) as Items
FROM ManifestoBatches m join
ManifestoItems i
on m.Id = i.BatchId inner join
AmzUsers u
on m.CreatedBy = u.Id
WHERE i.ScannerId is not null
GROUP BY m.Id
ORDER BY Items DESC
LIMIT 0, 10;

如果您仍然想要左连接,则将逻辑移至count():

SELECT m.Id, u.UserName, m.TotalRows, m.DateCreated, sum(i.ScannerId is not null) as Items
FROM ManifestoBatches m left join
ManifestoItems i
on m.Id = i.BatchId inner join
AmzUsers u
on m.CreatedBy = u.Id
GROUP BY m.Id
ORDER BY Items DESC
LIMIT 0, 10;

关于mysql - 连接列上的 SQL 过滤器查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24715557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com