如果表结构是一对多,如何在连接两个表时只选择1个唯一数据?

时间:2013-10-29 02:34:34

标签: sql oracle

我正在使用oracle数据库,我有两个表。

表A 主键= productid

表B 参考表A的产品

主键= imageid

流量:

每个产品应该有4个图像存储在表B中(强制性)

问题:

有些产品只有2张或有时3张或有时只有1张图片 尽管基于代码级别,4图像规则是强制性的。

问题:

如何计算表b中包含图像的唯一产品数量?因为,如果我这样做

select count(*) from tableA join tableB on tableA.productid = tableB.productid

结果是双倍的,因为它是一对多...因为,一个产品有很多图像。 所以,假设productID = 123454 images中有table B,一旦我运行查询,结果就是4,当我只想得到1 ......那么怎么样?

3 个答案:

答案 0 :(得分:1)

执行存在的子查询

select count(*) from tableA 
where exists (select 1 from tableB where tableA.productid = tableB.productid)

答案 1 :(得分:1)

SELECT Count(DISTINCT TableA.productid)
FROM   TableA 
JOIN   TableB ON TableA.productid = TableB.productid;

答案 2 :(得分:0)

SELECT COUNT(*) FROM
(    
select A.productId from tableA A join tableB B on A.productid = B.productid
    GROUP BY A.productId
    HAVING COUNT(B.imageId) > 1 ) T