如何在SQL查询中生成循环行为以获取多个查询并比较结果?

时间:2020-03-14 22:33:50

标签: sql oracle

我无法在SQL查询中生成循环行为。

我有两个桌子:

表A

Id Brand Prod_Id Alt_Prod_Id
1    A      2         5
2    B      3         9
3    C      5         9

表B

Id Prod_Id   Rate
1    2         5
2    3         9
2    5         7
2    9         9

需要在表B中查找每个品牌Prod_ID和Alt_Prod_Id的价格,并选择2个发现值之间的最小值

预期结果/输出为:

Brand Min_Prod_Val
  A         5
  B         9
  C         7

这可以在查询中完成吗?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以两次加入tableb(一次用于prod_id,另一次用于alt_prod_id),然后选择最小的rate

select 
    a.brand,
    least(b1.rate, b2.rate) min_prod_val
from tablea a
inner join tableb b1 on b1.prod_id = a.prod_id
inner join tableb b2 on b2.prod_id = a.alt_prod_id

不清楚您正在使用哪个数据库。如果是SQL Server:它不支持least(),那么您需要一个case表达式:

case when b1.rate < b2.rate then b1.rate else b2.rate end min_prod_val

答案 1 :(得分:1)

您可以使用单个联接并使用GROUP BY品牌:

SELECT a.Brand,
       MIN( b.rate ) AS min_prod_val
FROM   TableA A
       INNER JOIN TableB b
       ON ( b.prod_id IN ( a.prod_id, a.alt_prod_id ) )
GROUP BY a.Brand

或者您可以使用相关子查询:

SELECT a.Brand,
       (
         SELECT MIN( rate )
         FROM   TableB b
         WHERE  b.prod_id IN ( a.prod_id, a.alt_prod_id )  
       ) AS min_prod_val
FROM   TableA A

db<>fiddle

相关问题