2017-06-02 57 views
-1

我有一個「轉移」表有「量」列...的「轉移」表的結構看起來像這樣Mysql的另一個表中篩選數據的範圍

-------------------------------------------------------- 
| id | from_account_id | to_account_id | date | amount | 
-------------------------------------------------------- 

還有更實際的列但上述這些列與我的問題

現在我還有一個表,讓我們說「promo_dtl」表,顯示申請交易目前茂德..表看起來像這樣

------------------------------------------------------------------- 
| id | promo_id | min_amount_trx | max_amount_trx | cashback_type | cashback_value | max_cashback_value | 
01最相關現在我要做的是,我想從「轉移」表來查詢,通過 min_amount_trx,並從「promo_dtl」表 max_amount_trx範圍內對其進行篩選..

編輯: 例如,有2條記錄在「promo_dtl」表,具有相同promo_id值..第一行有min_amount_trx 100和max_amount_trx 1000 ..和第二有min_amount_trx 5000和

,所以我想找到交易金額爲1000 100之間的記錄和5000至10000之間

我想這簡單的查詢

select * from transfers trf 
where trf.amount 
    between (select min_amount_trx from promo_dtl where promo_id = 1) 
    and (select max_amount_trx from promo_dtl where promo_id = 1) 
; 

但是這是我從上面的查詢得到

Error Code: 1242. Subquery returns more than 1 row 

那麼我該如何正確獲取數據?我必須使用連接嗎?如果是這樣,任何人都可以幫助我嗎?感謝:d

+1

添加一些示例表數據以及預期的結果 - 所有以及格式化文本(即無圖像或鏈接。) – jarlh

+0

Error意味着SubQuery應該返回1行,所以如果我理解你的意思,它看起來像在你使用的子查詢中,你必須'Select MIN(min_amount_trx)'和'Select MAX(max_amount_trx)' –

+0

你需要將單行值傳遞給query valeu。但你的子查詢會重新調整多行。所以這是拋出錯誤。 – JYoThI

回答

1

您可以使用一個內連接這種方式,我認爲:

Select * from transfers 
INNER JOIN promo_dtl 
on transfers.amount >= promo_dtl.min_amount_trx 
    AND dbo.transfers.amount <= promo_dtl.max_amount_trx 
    AND promo_id = 1 

這應該給你所有你需要的數據。
我創建了一個小樣本,以測試和這裏的結果:

id   from_account_id to_account_id date     amount 
----------- --------------- ------------- ----------------------- ----------- 
1   1    2    2017-06-02 11:02:11.937 75 
2   3    4    2017-06-02 11:02:21.950 300 
3   5    6    2017-06-02 11:02:31.777 750 

(3 row(s) affected) 

id   promo_id min_amount_trx amx_amount_trx 
----------- ----------- -------------- -------------- 
1   1   50    100 
2   1   500   1000 
3   2   250   400 

(3 row(s) affected) 

id   from_account_id to_account_id date     amount  id   promo_id min_amount_trx amx_amount_trx 
----------- --------------- ------------- ----------------------- ----------- ----------- ----------- -------------- -------------- 
1   1    2    2017-06-02 11:02:11.937 75   1   1   50    100 
3   5    6    2017-06-02 11:02:31.777 750   2   1   500   1000 
+0

謝謝@PaulKaram,它工作的很好,很快:D – thekucays

3

的問題是其中之一:

select min_amount_trx from promo_dtl where promo_id = 1 

select max_amount_trx from promo_dtl where promo_id = 1 

正在返回更多一行。哪些不起作用。你可以這樣做:

select * from transfers trf 
where trf.amount 
    between (select MIN(min_amount_trx) from promo_dtl where promo_id = 1) 
    and (select MAX(max_amount_trx) from promo_dtl where promo_id = 1) 
; 

可以使用最小和最大彙總範圍

更新:

即使它沒有真正意義的我。 如果你喜歡做你在說什麼。你可以試試和EXISTS。就像這樣:

SELECT 
    * 
FROM 
    transfers 
WHERE EXISTS 
(
    SELECT NULL 
    FROM promo_dtl 
    WHERE promo_dtl.promo_id=1 
    AND transfers.amount 
     BETWEEN promo_dtl.min_amount_trx 
     AND promo_dtl.max_amount_trx 
); 
+0

如果我使用min()max(),如果有2行,第一個是min:100 max:500,第二個是min:1000 max:5000 ..所以查詢將查找100到5000之間的記錄。是不必要的 – thekucays

+0

但是誰應該選擇? – Arion

+0

他們倆..所以在上面的情況下,我想找到100-500和1000-5000之間的交易:D – thekucays

相關問題