如何查询Links表中不在Works表或插入超24小时的记录
完善后的查询方案
我来帮你搞定这个需求,用LEFT JOIN关联两张表再结合条件判断就能实现,具体SQL语句如下(以MySQL为例,其他数据库的时间函数我会在后面说明):
SELECT l.* FROM Links l LEFT JOIN Works w ON l.id = w.link_id -- 请根据你的实际关联字段修改这里,比如如果是link_uuid就换成对应字段 WHERE -- 情况1:记录不在Works表中,直接返回 w.link_id IS NULL -- 情况2:记录在Works表中,但插入时间超过24小时才返回 OR (w.link_id IS NOT NULL AND w.insert_time < NOW() - INTERVAL 24 HOUR);
逻辑拆解:
LEFT JOIN Works w ON l.id = w.link_id:用左连接保留Links表的所有记录,同时匹配Works表中对应的条目——如果没有匹配项,Works表的字段会是NULL。w.link_id IS NULL:这就是你已经实现的部分,筛选出那些在Works表里没有对应记录的Links数据。(w.link_id IS NOT NULL AND w.insert_time < NOW() - INTERVAL 24 HOUR):针对存在于Works表的记录,只保留插入时间距离当前时间超过24小时的条目。
不同数据库的时间适配:
- SQL Server:把时间判断改成
w.insert_time < DATEADD(HOUR, -24, GETDATE()) - PostgreSQL:改成
w.insert_time < NOW() - INTERVAL '24 hours' - Oracle:改成
w.insert_time < SYSDATE - 1(因为Oracle里1代表1天,也就是24小时)
内容的提问来源于stack exchange,提问作者Rene
相关产品推荐
相关产品推荐

