如何通过关联父表实现无时间戳衍生表的SQL增量加载
问题解决:通过父表时间戳获取衍生表增量数据
你的SQL执行报错主要有三个问题:
- SQL语法顺序错误:
WHERE子句必须写在JOIN语句之后,数据库无法识别前置的WHERE条件 - 日期值未加单引号:字符串类型的日期必须用单引号包裹,否则会被解析为数值运算
- 筛选条件逻辑错误:要获取最近7天的数据,应该用
UPDATE_DATE >= 7天前的时间,而不是小于某个固定时间
修正后的SQL(固定日期示例)
SELECT cppb.* FROM COM_PHYSICAL_PDF_BLOB cppb INNER JOIN COM_PHYSICAL_FILE cpf ON cpf.ID = cppb.ID WHERE cpf.UPDATE_DATE >= '2023-02-01 07:30:02.000'
更灵活的动态日期写法(自动计算最近7天)
不同数据库的日期函数略有差异,以下是常见数据库的写法:
- MySQL/MariaDB:
SELECT cppb.* FROM COM_PHYSICAL_PDF_BLOB cppb INNER JOIN COM_PHYSICAL_FILE cpf ON cpf.ID = cppb.ID WHERE cpf.UPDATE_DATE >= DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
- SQL Server:
SELECT cppb.* FROM COM_PHYSICAL_PDF_BLOB cppb INNER JOIN COM_PHYSICAL_FILE cpf ON cpf.ID = cppb.ID WHERE cpf.UPDATE_DATE >= DATEADD(DAY, -7, GETDATE())
- Oracle:
SELECT cppb.* FROM COM_PHYSICAL_PDF_BLOB cppb INNER JOIN COM_PHYSICAL_FILE cpf ON cpf.ID = cppb.ID WHERE cpf.UPDATE_DATE >= SYSDATE - 7
逻辑说明
通过INNER JOIN关联父表COM_PHYSICAL_FILE和衍生表COM_PHYSICAL_PDF_BLOB,利用父表的UPDATE_DATE字段筛选出最近7天内有更新的记录,从而获取对应的衍生表增量数据。如果需要包含父表字段,可在SELECT中添加cpf.*或指定字段。
内容的提问来源于stack exchange,提问作者TANMAY SETHI
相关产品推荐
相关产品推荐

