我应该如何查询这些表格?

时间:2017-12-15 18:42:49

标签: sql database oracle oracle-sqldeveloper

那是我的数据库:

E-R

这是(第一个)商品表,其中包含文章和相应的ID:

offer

这是(第二个)投标表,其中包含所提供的文章:

bid

我必须查询提供相同数量

的文章的数量

所以我想在这里花这个:

ID1  ID2 Number_of_Orders                      
  1    2                2                
  1    5                2                 
  2    5                2          

我尝试将其加入内联视图:

 SELECT DISTINCT * FROM 
(SELECT BID.ID as ID1 FROM OFFER 
    INNER JOIN BID ON OFFER.ID=BID.ID
    GROUP BY GEBOT.ID) v1,
(SELECT BID.ID as ID2 FROM OFFER 
    INNER JOIN BID ON OFFER.ID=BID.ID
    GROUP BY BID.ID) v2, 
(SELECT COUNT(GID) as NUMBER_OF_ORDERS FROM BID
INNER JOIN OFFER ON OFFER.ID=BID.ID
    GROUP BY BID.ID
    ) v3;

但我不知道如果他们有相同数量的订单(出价),我应该如何使用这两个ID

2 个答案:

答案 0 :(得分:0)

你只需加入(内连接)这两个表并放入条件如table1.bidPrice = table2.bidPrice

答案 1 :(得分:0)

您似乎想要计算每个ID的出价,然后对该结果进行自我加入以查找匹配项:

with cte (id, number_of_bids) as (
  select id, count(*)
  from bid
  group by id
)
select c1.id as id1, c2.id as id2, c1.number_of_bids
from cte c1
join cte c2
on c2.number_of_bids = c1.number_of_bids
and c2.id > c1.id
order by id1, id2;

       ID1        ID2 NUMBER_OF_BIDS
---------- ---------- --------------
         1          2              2
         1          5              2
         2          5              2

CTE只需通过简单的聚合获取每个ID的商品数量。 (您可以使用内联视图而不是CTE来执行此操作,但是您可以在每个内联视图中对它们进行两次计数)。

然后主要查询将聚合的number_of_bids上的CTE连接到自身,并且还有一个第二个ID高于第一个ID,这消除了重复。如果不这样做,你会看到ID1为5且ID2为2的行,即你想要的三行中的最后一行(和其他两行相同),以及与自身匹配的每个ID /计数

您不需要加入优惠表 - 您没有使用其中的任何数据。