簡體   English   中英

如何以條件行值聯接表?

[英]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    |

您可以嘗試使用此簡單的子查詢選項-

SELECT *,
(
    SELECT TOP 1 amount 
    FROM TableA A 
    WHERE A.range <=  B.rank
    AND A.id = B.a_id
    ORDER BY A.range DESC
) Amount 
FROM TableB B

您可以在此處檢查演示

在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM