使用日期子句编写子查询
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);
然而它不起作用,但我可以使用连接函数让它工作,但我不能使用子查询,我如何在没有连接函数的子查询中做到这一点?
您需要从 bookings table
select customerid
SELECT custfirstname, custareacode
FROM Customer
WHERE customerid IN (SELECT customerid
FROM Bookings
WHERE DateDiff(CURDATE(), bookingdate) <=180);
您的代码的问题是子查询 returns 列 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)
.
上的索引
所以基本上我是想写一些东西,如果他们在当前日期的最后 6 个月内进行了预订,就会打印出客户的姓名和区号。
我的代码看起来像这样(它必须是一个子查询,不使用连接)
SELECT custfirstname, custareacode
FROM Customer
WHERE customerid IN (SELECT bookingdate
FROM Bookings
WHERE DateDiff(CURDATE(), bookingdate) <=180);
然而它不起作用,但我可以使用连接函数让它工作,但我不能使用子查询,我如何在没有连接函数的子查询中做到这一点?
您需要从 bookings table
customerid
SELECT custfirstname, custareacode
FROM Customer
WHERE customerid IN (SELECT customerid
FROM Bookings
WHERE DateDiff(CURDATE(), bookingdate) <=180);
您的代码的问题是子查询 returns 列 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)
.