tengo las tablas:
Product(code (PK), pname, (....), sid (FK)), Supplier(sid(PK), sname, (....))La tarea es:
Encuentre proveedores que suministren un solo producto. Muestre su nombre (
sname) y el nombre del producto (pname).
Me parece un problema de GROUP BY , así que usé:
SELECT sid FROM Product GROUP BY sid HAVING CAST(COUNT(*) AS INTEGER) = 1; Esta consulta me ha encontrado la lista de sid que suministran un solo producto, pero ahora he encontrado un problema:
SELECT anidadas.sid )GROUP BY , la agrupación también se basará en el nombre del producto, lo cual es un comportamiento no deseado.¿Cómo debo abordar el problema, entonces?
Nota: yo uso PostgreSQL
Puede formular la consulta como:
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; No necesita convertir COUNT(*) a un número entero. Ya es un número entero.
podrías poner
max(pname) en la lista SELECT . Eso es un agregado, por lo que estaría bien.