Sql 仅用于对某些类型的列进行筛选的附加条件
下面是我的用例:我想在一个条件下过滤掉所有记录,并在附加条件下过滤掉一些记录 已编辑 以下是两个条件:Sql 仅用于对某些类型的列进行筛选的附加条件,sql,oracle,Sql,Oracle,下面是我的用例:我想在一个条件下过滤掉所有记录,并在附加条件下过滤掉一些记录 已编辑 以下是两个条件: 所有记录必须满足在SYSDATE+30创建的条件 表用户中具有(共享)与表黑名单中相同id的记录(join on u.id=b.id),其中列端点等于XYZ,必须将列延迟到符合标准比现在更早的。如果端点不等于XYZ,则仅应用第1个条件 我提出了以下问题: SELECT * users u left join blacklist b ON u.id = b.id AND
join on u.id=b.id
),其中列端点等于XYZ
,必须将列延迟到符合标准比现在更早的。如果端点不等于XYZ
,则仅应用第1个条件
SELECT * users u
left join blacklist b
ON u.id = b.id
AND b.delayed_until < SYSDATE
AND u.endpoint = 'XYZ'
WHERE u.created_at > SYSDATE + 30;
选择*users u
左加入黑名单b
在u.id=b.id上
和b.延迟到SYSDATE+30;
以下是我的模式(简化):
我的查询是否符合预期?可以重写它以便更快吗?如果是,怎么做?我想这就是你想要的:
SELECT *
FROM users u JOIN
blacklist b
ON u.id = b.id AND
(b.delayed_until <= SYSDATE OR
u.endpoint <> 'XYZ'
)
WHERE u.created_at > SYSDATE + 30;
选择*
来自你加入的用户
黑名单b
在u.id=b.id和
(b)延迟至SYSDATE+30;
对于左联接
而言,在on
子句中的第一个表上进行筛选没有意义
对于此查询,您需要
用户(端点,创建时间,id)
和黑名单(id,延迟时间)上的索引
此查询是否查找所有端点,而不仅仅是那些等于XYZ
的端点。我希望查找所有端点。请查看我更新的问题并进行一些澄清。@menteith…我根据您的评论修改了查询。我想您只需要内部联接,而不是外部联接。谢谢。您能解释一下使用