大于和小于等于SQL Server内连接NEED

时间:2016-04-12 15:41:19

标签: sql-server-2012 inner-join

我目前正在开发一个允许您借钱的系统。事情是为了发放贷款,您必须通过所需的贷款,或者必须在您的银行账户中存入更多金额。

以下是存款的架构

tbl_fxd_dep

    fxid | amount
    1      10,000
    2      15,000.01
    3      20,000.01

以下是员工存入金额的架构

tbl_employee

    empid | amount
    1       15,100.01

正如您所看到的那样,员工存款金额不等于15,000.0120,000.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

这是我创建的内部联接语句问题是,每当我尝试使用用户帐户和密码登录时,它都不会查询用户的个人资料,我尝试删除此部分and e.amount <= f.amount {{ 1}}提取的是fxid,而不是在这种情况下1显示它应属于的fxid,有人可以为我提供此问题的替代解决方案

谢谢你,感谢你们给予的任何努力......

1 个答案:

答案 0 :(得分:1)

您的加入条件中存在非常严重的逻辑缺陷 - 即,因为在任何给定时间只考虑一行,唯一的值可以小于或等于 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

SQL Server将采用此查询和

  1. 选择员工的数据
  2. 将该数据连接到符合条件的所有值(存款限额低于存款金额)
  3. 汇总数据,使其仅返回员工的一行,以及员工符合条件的最大M1