在不允许嵌套 SELECTS 时选择不在 GROUP BY 中的字段

Selecting fields that are not in GROUP BY when nested SELECTS aren't allowed

我有 tables:

Product(code (PK), pname, (....), sid (FK)),
Supplier(sid(PK), sname, (....))

作业是:

Find Suppliers that supply only one product. Display their name (sname) and product name (pname).

在我看来这是一个 GROUP BY 问题,所以我使用了:

SELECT sid FROM
Product GROUP BY sid
HAVING CAST(COUNT(*) AS INTEGER) = 1;

此查询为我找到了 sid 只供应一种产品的列表,但现在我遇到了一个问题:

那我应该怎么处理这个问题呢?

注:我用的是PostgreSQL

你可以把

max(pname)

SELECT 列表中。那是一个聚合,所以它会很好。

您可以将查询表述为:

SELECT s.sid, s.sname, MAX(p.pname) as pname
FROM Product p JOIN
     Supplier s
     ON p.sid = s.sid
GROUP BY s.sid, s.sname
HAVING COUNT(*) = 1;

您不需要将 COUNT(*) 转换为整数。已经是整数了。