Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.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
oracle sql:通过具有_Sql_Oracle - Fatal编程技术网

oracle sql:通过具有

oracle sql:通过具有,sql,oracle,Sql,Oracle,我有两张桌子A和B 两个表都有一个列Prod_id,即两个表可以在该列上连接,如 A.Prod_id = B.Prod_id Prod_Id不是这两个表中任何一个表的主键。这两个表都有不同的主键列 产品id列具有以下值: prod_id -------------- 111 222 111 333 222 prod_id -------------- 111 222 111 111 333 222 333 B Prod_id列具有以下值: prod_id -------------- 111

我有两张桌子A和B

两个表都有一个列Prod_id,即两个表可以在该列上连接,如

A.Prod_id = B.Prod_id
Prod_Id不是这两个表中任何一个表的主键。这两个表都有不同的主键列

产品id列具有以下值:

prod_id -------------- 111 222 111 333 222 prod_id -------------- 111 222 111 111 333 222 333 B Prod_id列具有以下值:

prod_id -------------- 111 222 111 333 222 prod_id -------------- 111 222 111 111 333 222 333 与表中同一产品标识的行数相比,表中任何产品标识的行数总是更多111333行或相同222行

我必须写一个查询来找出那些B表的行数比a表的行数多的产品id

我在where子句中使用其他列时必须使用其他条件。但这些都与此无关

你能帮帮我吗?我是SQL新手。

试试这个:

SELECT b.prod_id
FROM (
  SELECT prod_id, COUNT(*) AS prodCount
  FROM tableA
  GROUP BY prod_id
  ) a
INNER JOIN (
  SELECT prod_id, COUNT(*) AS prodCount
  FROM tableB
  GROUP BY prod_id
  ) b ON a.prod_id = b.prod_id
WHERE b.prodCount > a.prodCount
这将获取表A中每个产品标识的计数,在表B中,通过产品标识将它们连接起来,并验证哪些产品标识在B中出现的次数比在A中出现的次数多

正如Gordon所建议的,这里的版本考虑了tat tableA没有产品id记录的可能性:

SELECT b.prod_id
FROM (
  SELECT prod_id, COUNT(*) AS prodCount
  FROM tableA
  GROUP BY prod_id
  ) a
RIGHT JOIN (
  SELECT prod_id, COUNT(*) AS prodCount
  FROM tableB
  GROUP BY prod_id
  ) b ON a.prod_id = b.prod_id
WHERE b.prodCount > a.prodCount
  OR a.prod_id IS NULL
对于这些记录,a.prod_将为NULL,因为我们正在进行正确的连接


假设您的主键名为pk,这将生成您想要的结果:

select
  b.prod_id,
  count(distinct a.pk),
  count(distinct b.pk)
from
  b left join a on a.prod_id = b.prod_id
group by
  b.prod_id
having
  count(distinct b.pk) > count(distinct a.pk)
选择t2.prod\u id 按产品id t1从组中选择count*amount,A.prod\u id, 从B组中按产品id t2选择计数*金额、B产品id 其中t1.prod_id=t2.prod_id t2.amount>t1.amount Oracle 11g R2架构设置:

问题1:


这个查询不缺少FROM子句吗?也许你可以解释一下你在做什么,这样人们可以从中学习。错误的查询。缺少第条我认为如果考虑到tableA对于给定的产品id可能根本没有行的可能性,这将更加准确。@GordonLinoff。谢谢你的建议。我添加了一个查询来考虑这一点。
| PROD_ID |
|---------|
|     333 |
|     111 |