我无法在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
这可以在查询中完成吗?
谢谢!
答案 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