Mysql的另一个表中筛选数据的范围
问题描述:
我有一个“转移”表有“量”列...的“转移”表的结构看起来像这样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
答
您可以使用一个内连接这种方式,我认为:
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
答
的问题是其中之一:
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
);
添加一些示例表数据以及预期的结果 - 所有以及格式化文本(即无图像或链接。) – jarlh
Error意味着SubQuery应该返回1行,所以如果我理解你的意思,它看起来像在你使用的子查询中,你必须'Select MIN(min_amount_trx)'和'Select MAX(max_amount_trx)' –
你需要将单行值传递给query valeu。但你的子查询会重新调整多行。所以这是抛出错误。 – JYoThI