【问题标题】:SQL Server Joining 3 TablesSQL Server 连接 3 个表
【发布时间】:2013-09-26 22:42:57
【问题描述】:

请帮帮我,下面是我的 sql 查询。当我执行它时,结果什么都没有。

SELECT tblclientinfo.acctnum, 
       tblclientinfo.fname, 
       tblclientinfo.fname, 
       tblreservation.unitnum, 
       tblbillingsched.billnum, 
       tblbillingsched.duedate, 
       tblbillingsched.monthlyamort, 
       tblbillingsched.totalbalance 
FROM   tblclientinfo 
       JOIN tblreservation 
         ON tblclientinfo.acctnum = tblreservation.reservationnum 
       JOIN tblbillingsched 
         ON tblreservation.reservationnum = tblbillingsched.accountnum 
WHERE  tblbillingsched.accountnum = 'C0000000021' 
       AND tblbillingsched.duedate BETWEEN '1/1/2014' AND '1/30/2014'

这是我的桌子:

tblClientInfo, pk = acctNum
tblReservation, pk = ReservationNum, fk = accountNum
tblBillingSched, pk = ID,  fk = accountNum

【问题讨论】:

  • 您确定您的数据符合这些过滤条件吗?
  • 感谢大家的及时回复,但结果仍然是空的。我仔细检查了每张桌子,它们都有数据。我认为我的 pk 和 fk 是问题,但我不知道如何解决它。请看我的表关系图。 link

标签: sql sql-server


【解决方案1】:

我想你正在寻找...

SELECT tblclientinfo.acctnum, 
       tblclientinfo.fname, 
       tblclientinfo.fname, 
       tblreservation.unitnum, 
       tblbillingsched.billnum, 
       tblbillingsched.duedate, 
       tblbillingsched.monthlyamort, 
       tblbillingsched.totalbalance 
FROM   tblclientinfo 
       JOIN tblreservation 
         ON tblclientinfo.acctnum = tblreservation.accountnum 
       JOIN tblbillingsched 
         ON tblclientinfo.acctnum = tblbillingsched.accountnum 
WHERE  tblbillingsched.accountnum = 'C0000000021' 
       AND tblbillingsched.duedate BETWEEN '1/1/2014' AND '1/30/2014'

See a demo

【讨论】:

  • @harifx,我的 tblbillingsched.duedate 数据类型仅为日期。
  • 这是您的第 999 个答案 :D 您发布的下一个答案将是您的第 1000 个答案
  • @Doorknob Here's #1000
【解决方案2】:

您的第一次加入是错误的。在表 tblReservation 中,外键是 accountNum,您使用字段 reservationnum 进行连接。 代码应该是这样的:

SELECT tblclientinfo.acctnum, 
    `tblclientinfo.fname, 
     tblclientinfo.fname, 
     tblreservation.unitnum, 
     tblbillingsched.billnum, 
     tblbillingsched.duedate, 
     tblbillingsched.monthlyamort, 
     tblbillingsched.totalbalance 
FROM tblclientinfo 
     JOIN tblreservation 
     ON tblclientinfo.acctnum = tblreservation.accountNum 
     JOIN tblbillingsched 
     ON tblreservation.reservationnum = tblbillingsched.accountnum 
WHERE  tblbillingsched.accountnum = 'C0000000021' 
       AND tblbillingsched.duedate BETWEEN '1/1/2014' AND '1/30/2014'

【讨论】:

    【解决方案3】:

    DueDate 是日期时间字段吗?试试以下方法,看看它是否有效:

    CAST(tblbillingsched.duedate AS DATE) 介于“2014 年 1 月 1 日”和“2014 年 1 月 30 日”之间

    查看这篇文章以获得更详细的讨论:

    how to query Datetime object by date?

    【讨论】:

      【解决方案4】:

      (题外话,可能不是答案,但我认为值得注意)

      这种更安全的形式:

      tblbillingsched.duedate BETWEEN '1/1/2014' AND '1/30/2014'
      

      这是:

      tblbillingsched.duedate >= '20140101' AND 
      tblbillingsched.duedate <'20140130'
      

      '20140130' 这样的日期是明确无误的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-02
        相关资源
        最近更新 更多