[英]How to join table with condition on row values?
以下是我的表格數據
表A
| amount | range | id |
+--------+---------+-----+
| 720 | 1 | 115 |
| 360 | 2 | 115 |
| 180 | 3 | 115 |
| 180 | 4 | 115 |
| 135 | 5 | 115 |
| 135 | 10 | 115 |
表B
+------+-----+
| rank | a_id|
+------+-----+
| 1 | 115 |
| 2 | 115 |
| 3 | 115 |
| 4 | 115 |
| 5 | 115 |
| 6 | 115 |
| 7 | 115 |
| 8 | 115 |
| 9 | 115 |
| 10 | 115 |
我需要通過連接這兩個表來獲得以下結果。
+------+-----+--------+
| rank | a_id| amount |
+------+-----+--------+
| 1 | 115 |720
| 2 | 115 |360
| 3 | 115 |180
| 4 | 115 |180
| 5 | 115 |135
| 6 | 115 |135
| 7 | 115 |135
| 8 | 115 |135
| 9 | 115 |135
| 10 | 115 |135
由於我嘗試了以下查詢。 但是我無法獲得確切的結果。 因為它僅與等級匹配。 我也嘗試過使用大小寫查詢,但沒有得到確切的結果。 關於如何解決的任何建議
select rank
, sample_test.amount
from a
join b
on a.id = b.a_id
and rank = range
order
by rank
加入表並按等級a_id分組以獲得每個組的最小數量:
select
b.rank, b.a_id, min(a.amount) amount
from tableb b inner join tablea a
on b.a_id = a.id and b.rank >= a.range
group by b.rank, b.a_id
參見演示 。
根據時間間隔和等級,可能的邏輯(還不夠清楚)可能是在ON子句中使用相反的符號,並使用max代替min:
select
b.rank, b.a_id, max(a.amount) amount
from tableb b inner join tablea a
on b.a_id = a.id and b.rank <= a.range
group by b.rank, b.a_id
參見演示 。
這兩個查詢(針對此樣本數據)均返回相同的結果:
| rank | a_id | amount |
| ---- | ---- | ------ |
| 1 | 115 | 720 |
| 2 | 115 | 360 |
| 3 | 115 | 180 |
| 4 | 115 | 180 |
| 5 | 115 | 135 |
| 6 | 115 | 135 |
| 7 | 115 | 135 |
| 8 | 115 | 135 |
| 9 | 115 | 135 |
| 10 | 115 | 135 |
在MySQL中,我將使用相關子查詢:
SELECT b.*,
(SELECT a.amount
FROM TableA a
WHERE a.range <= b.rank AND
a.id = b.a_id
ORDER BY a.range DESC
) as Amount
FROM TableB b;
特別是,這可以利用TableA(id, range desc)
上的索引。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.