[英]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.