Sql 如果表结构为一对多,如何在连接两个表时仅选择一个唯一数据?
我使用的是oracle数据库,我有两个表 表A 主键=productid 表B 引用表A的productid 主键=图像ID 流量: 每个产品应在表B中存储4个图像(必填) 问题: 有些产品只有2张图像,有时只有3张图像,有时只有1张图像 尽管事实上,4图像规则是基于代码级别的强制性规则 问题: 如何计算表b中有图像的产品的唯一数量?因为,如果我这样做Sql 如果表结构为一对多,如何在连接两个表时仅选择一个唯一数据?,sql,oracle,Sql,Oracle,我使用的是oracle数据库,我有两个表 表A 主键=productid 表B 引用表A的productid 主键=图像ID 流量: 每个产品应在表B中存储4个图像(必填) 问题: 有些产品只有2张图像,有时只有3张图像,有时只有1张图像 尽管事实上,4图像规则是基于代码级别的强制性规则 问题: 如何计算表b中有图像的产品的唯一数量?因为,如果我这样做 从tableA选择count(*)加入tableA.productid=tableB.productid上的tableB 结果是双倍的,因为它是
从tableA选择count(*)加入tableA.productid=tableB.productid上的tableB
结果是双倍的,因为它是一对多的…就像,一个产品有许多图像。
假设
productID=12345
在表B
中有4个图像
,一旦我运行了我的查询,结果是4,当我只想得到1…那么如何做呢?对存在的位置进行子查询
select count(*) from tableA
where exists (select 1 from tableB where tableA.productid = tableB.productid)
谢谢这个答案是我的第一个答案,也是第一个被接受的答案!顺便说一下,这叫做半连接。根据Oracle文档,当右侧的多行满足子查询的条件时,半连接返回与EXISTS子查询匹配的行,而不复制谓词左侧的行。
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
SELECT Count(DISTINCT TableA.productid)
FROM TableA
JOIN TableB ON TableA.productid = TableB.productid;