Oracle SQL中HAVING COUNT查询无结果:如何筛选至少两份副本的艺术品
问题解决方案
先拆解你原SQL的问题:
- 子查询里的
HAVING COUNT(w.copy) > 2是筛选至少3份副本的作品,但你的需求是至少2份,条件本身就不符合要求。 - 用
COUNT(w.copy)会忽略Copy字段为NULL的记录,如果你的Copy字段存在NULL值,统计出的副本数会不准确。改用COUNT(*)更靠谱,它会统计该WorkID下的所有记录(每条记录对应一个副本)。
修正后的SQL:
SELECT w.WorkID, w.Title, w.Copy, w.Medium, w.Description, a.FirstName || ' ' || a.LastName AS ArtistFullName FROM dtoohey.Work w INNER JOIN dtoohey.artist a ON w.ArtistID = a.ArtistID WHERE w.WorkID IN ( SELECT WorkID FROM dtoohey.Work GROUP BY WorkID HAVING COUNT(*) >= 2 );
如果能确认Copy字段没有NULL值,也可以把COUNT(*)换成COUNT(Copy),但COUNT(*)的兼容性和准确性更强。另外把旧式的逗号连接改成INNER JOIN语法,逻辑更清晰,也符合现代SQL规范。
内容的提问来源于stack exchange,提问作者Boko28
相关产品推荐
相关产品推荐

