如何统计一个外键并用它来排序主table?
How to count a foreign key and use it to sort the primary table?
我有 2 个表:
- 产品(prod_id、prod_name、vend_id)
- 供应商(vend_id、vend_name、vend_state)
我正在尝试进行查询,为我提供每个仅提供一种产品的供应商的 vend_name
列表。 vend_id
是 Product
中的外键,我想计算每个 vend_id
在 Product
中有多少个实例,然后列出 vend_name
那些只出现一次的。任何帮助将不胜感激。
我正在使用 Oracle SQL Developer(因为我必须)。
这就是我所拥有的,但不断收到“无效标识符”或“此处不允许组函数”的提示
select count(*), Product.vend_id, Vendor.vend_id
from Product
inner join Vendor on Product.vend_id = vend.vend_id
where count(*) < 2
group by product.vend_id, vendor.vend_name;
像这样的东西应该可以工作:
SELECT vend_name
FROM Vendor
WHERE vend_id IN (
SELECT vend_id
FROM Product
GROUP BY vend_id
HAVING COUNT(DISTINCT product_id) = 1
)
;
如果您想 select 只有一种产品的供应商,查询类似于:
select Vend_id, count(*) as Tot_Products
from Product
group by Vend_id
having count(*) = 1
我建议你学习函数 GROUP BY... HAVING
,这样你就可以在 calcolata 列上写一个条件(就像 MAX, MIN
和所有其他函数的结果一样)而无需使用 nasted查询如:
select *
from (select Vend_id, count(*) as Tot_Products
from Product
group by Vend_id)
where Tot_Products = 1
现在你有了每个只有一个产品的供应商的 Id,现在你可以通过加入供应商来获取供应商的所有信息,你有这样的东西吗:
SELECT V.Vend_name
FROM ( select Vend_id
from Product
having count(*) = 1
group by Vend_id )as P
inner join Vendors as V
on p.Vend_id = V.Vend_id
我有 2 个表:
- 产品(prod_id、prod_name、vend_id)
- 供应商(vend_id、vend_name、vend_state)
我正在尝试进行查询,为我提供每个仅提供一种产品的供应商的 vend_name
列表。 vend_id
是 Product
中的外键,我想计算每个 vend_id
在 Product
中有多少个实例,然后列出 vend_name
那些只出现一次的。任何帮助将不胜感激。
我正在使用 Oracle SQL Developer(因为我必须)。
这就是我所拥有的,但不断收到“无效标识符”或“此处不允许组函数”的提示
select count(*), Product.vend_id, Vendor.vend_id
from Product
inner join Vendor on Product.vend_id = vend.vend_id
where count(*) < 2
group by product.vend_id, vendor.vend_name;
像这样的东西应该可以工作:
SELECT vend_name
FROM Vendor
WHERE vend_id IN (
SELECT vend_id
FROM Product
GROUP BY vend_id
HAVING COUNT(DISTINCT product_id) = 1
)
;
如果您想 select 只有一种产品的供应商,查询类似于:
select Vend_id, count(*) as Tot_Products
from Product
group by Vend_id
having count(*) = 1
我建议你学习函数 GROUP BY... HAVING
,这样你就可以在 calcolata 列上写一个条件(就像 MAX, MIN
和所有其他函数的结果一样)而无需使用 nasted查询如:
select *
from (select Vend_id, count(*) as Tot_Products
from Product
group by Vend_id)
where Tot_Products = 1
现在你有了每个只有一个产品的供应商的 Id,现在你可以通过加入供应商来获取供应商的所有信息,你有这样的东西吗:
SELECT V.Vend_name
FROM ( select Vend_id
from Product
having count(*) = 1
group by Vend_id )as P
inner join Vendors as V
on p.Vend_id = V.Vend_id