sql—当不允许嵌套选择时,选择不在group by中的字段

czq61nw1  于 2021-07-29  发布在  Java
关注(0)|答案(2)|浏览(413)

我有table:

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

任务是:
寻找只供应一种产品的供应商。显示他们的名字( sname )产品名称( pname ).
在我看来,这就像 GROUP BY 问题,所以我用了:

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

此查询已找到 sid 它只提供一种产品,但现在我遇到了一个问题:
赋值禁止任何形式的嵌套 SELECT 查询。
我编写的查询结果只有一列(这个 sid (列)
因此,我无法访问产品名称,因为它不在查询结果表中,如果我将它添加到 GROUP BY 语句,则分组也将基于产品名称,这是不需要的行为。
那么,我该如何处理这个问题呢?
注意:我使用postgresql

z18hc3ub

z18hc3ub1#

您可以将查询短语为:

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(*) 一个整数。它已经是一个整数了。

gcmastyq

gcmastyq2#

你可以把

max(pname)

SELECT 列表。这是一个集合,所以可以。

相关问题