Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果表结构为一对多,如何在连接两个表时仅选择一个唯一数据?_Sql_Oracle - Fatal编程技术网

Sql 如果表结构为一对多,如何在连接两个表时仅选择一个唯一数据?

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 结果是双倍的,因为它是

我使用的是oracle数据库,我有两个表

表A 主键=productid

表B 引用表A的productid

主键=图像ID

流量:

每个产品应在表B中存储4个图像(必填)

问题:

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

问题:

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

从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;