繁体   English   中英

使用日期子句编写子查询

[英]Writing a sub-query using a date clause

所以基本上我想写一些东西来打印客户的姓名和区号,如果他们在当前日期的最后 6 个月内进行了预订。

我的代码看起来像这样(它必须是一个子查询,而不是使用连接)

SELECT custfirstname, custareacode
FROM Customer
WHERE customerid IN (SELECT bookingdate
                FROM Bookings
                  WHERE DateDiff(CURDATE(), bookingdate) <=180);

然而它不起作用,但我可以使用连接函数让它工作,但我不能使用子查询,我将如何在没有连接函数的子查询中做到这一点?

您的代码的问题在于子查询返回列bookingdate ,然后您将其与customerid进行比较。 这不会匹配。

我会推荐exists和相关的子查询。 假设您在bookings有列customerid ,那么:

select c.custfirstname, c.custareacode
from customer c
where exists (
    select 1
    from bookings b
    where b.customerid = b.customerid 
      and b.bookingdate >= current_date - interval 6 month
)

有了正确的索引,在大型数据集上, exists性能通常比in()好得多。 在这里,您需要一个关于bookings(customerid, bookingdate)的索引。

您需要从bookings table选择customerid

SELECT custfirstname, custareacode
FROM Customer
WHERE customerid IN (SELECT customerid
                FROM Bookings
                  WHERE DateDiff(CURDATE(), bookingdate) <=180);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM