【问题标题】:Creating a view using join and DATEDIFF() in mysql在 mysql 中使用 join 和 DATEDIFF() 创建视图
【发布时间】:2021-07-16 02:04:55
【问题描述】:

我知道已经有人问过关于使用连接创建视图的问题,这很好,除了这里我试图包含日期差异。

我有一张名为“约会”的表格和一张名为“账单”的表格,其 AppID 为 FK。

我希望创建一个视图,由 BillNo(账单编号)、PatientID 和 Date 组成

CREATE VIEW overdue_payments AS
    SELECT bill.BillNo, appointment.AppID, appointment.AppDate
        FROM bill,appointment
        WHERE bill.AppID=appointment.AppID
        AND DATEDIFF(AppDate, CURDATE())>30

那个被使用并且代码实现了但是它没有添加过期的测试日期:

CREATE VIEW overdue_payments2 AS

    SELECT bill.BillNo, appointment.AppID, appointment.AppDate
        FROM bill,appointment
        inner join appointment on bill.AppID=appointment.AppID
        where DATEDIFF(AppDate, CURDATE())>30

然后我尝试使用内部联接,但收到“非唯一表”错误。

非常感谢任何帮助。

【问题讨论】:

  • “不添加过期的考试日期”是什么意思?在您的其余问题中,我没有看到任何其他可以解决该问题的内容。
  • 我的意思是在视图中我没有看到过期的账单。视图是空的
  • 请提供完整的minimal reproducible example

标签: mysql join view datediff


【解决方案1】:

您的第一个查询使用了早已弃用的逗号交叉连接语法:

    FROM bill,appointment
    WHERE bill.AppID=appointment.AppID

要将其更改为现代的显式连接语法,您需要:

    FROM bill
    INNER JOIN appointment ON bill.AppID=appointment.AppID

但是您在账单上留下了“,约会”,所以它抱怨您试图加入约会两次而没有提供别名。只需删除“,约会”即可。

【讨论】:

  • 谢谢,但视图仍然是空的。可以说没有抱怨,创造了视野,但它是空的
  • 您的查询应返回任何有账单且 AppDate 超过 30 天的约会。也许没有这样的约会?什么是过期的,你想如何确定它?
  • 我不得不交换 DATEDIFF(CURDATE(), AppDate)>30。但是你帮助了谢谢你!
猜你喜欢
  • 2023-03-08
  • 1970-01-01
  • 1970-01-01
  • 2017-08-29
  • 1970-01-01
  • 1970-01-01
  • 2018-07-02
  • 2014-10-23
  • 1970-01-01
相关资源
最近更新 更多