Sql server 2012 SQL Server内部联接需要中的大于和小于
我目前正在开发一个允许你贷款的系统。问题是,为了贷款,你必须通过规定的手续,或者必须在你的银行账户上有更多的存款 这是存款的模式 tbl\u fxd\u dep:Sql server 2012 SQL Server内部联接需要中的大于和小于,sql-server-2012,inner-join,Sql Server 2012,Inner Join,我目前正在开发一个允许你贷款的系统。问题是,为了贷款,你必须通过规定的手续,或者必须在你的银行账户上有更多的存款 这是存款的模式 tbl\u fxd\u dep: fxid | amount 1 10,000 2 15,000.01 3 20,000.01 empid | amount 1 15,100.01 以下是员工存款金额的模式 待定员工: fxid | amount 1
fxid | amount
1 10,000
2 15,000.01
3 20,000.01
empid | amount
1 15,100.01
以下是员工存款金额的模式
待定员工:
fxid | amount
1 10,000
2 15,000.01
3 20,000.01
empid | amount
1 15,100.01
如您所见,员工存款金额既不等于15000.01
也不等于20000.01
,而是介于这两个金额之间
这是我的sql语句
Select
empid, fname, mname, lname, st, prv, city, cnt, fxid
from
emp as e
inner join
fd as f on e.amount >= f.amount
and e.amount <= f.amount
where
uname = @user and pwd = @pwd
选择
empid、fname、mname、lname、st、prv、城市、cnt、fxid
从…起
emp as e
内连接
在e.amount>=f.amount上作为f的fd
而e.amount在连接条件中有一个相当严重的逻辑缺陷-即,由于在任何给定时间只考虑一行,因此根据定义,唯一可以小于或等于x且大于或等于x的值等于x。这就是marc_s在评论中试图指出的:你所使用的标准并不是你所认为的那样。由于数据集很小,您可以很快地完成此操作:只需将文本值15000.01
替换为e.amount
,然后查看数据
您似乎希望获得给定员工符合的最高fxid
(旁注:为什么是员工而不是客户?)。您可以使用如下查询来完成此操作:
SELECT
empid
,fxid = MAX(fxid)
FROM
emp AS e
INNER JOIN fd AS f
ON e.amount <= f.amount
WHERE
uname = @user AND
pwd = @pwd
GROUP BY
empid
选择
舞虻
,fxid=MAX(fxid)
从…起
emp AS e
内连接fd为f
在e.金额上,如果e.金额
必须大于或等于f.金额
,同时也小于或等于-----这基本上意味着您只选择那些具有相同数量的行……它转到<代码> fxid 1 到<代码> fxid 3 < /> >通过<代码> fxID-2 只显示了<>代码> 1 和<代码> 3 < /代码>,它不考虑“代码> fxid 2 < /代码>作为另一个Id in。以某种方式。假设初始存款为15100.00,fxid
应该开始的范围是15000.01
,结束于20000
,但它完全忽略了“15000.01”标记。有办法解决这个问题吗?谢谢