[英]Additional condition used for filtering only on some type of columns
这是我的用例:我想在一个条件下过滤掉所有记录,并在其他条件下过滤掉一些记录。
已编辑
这是两个条件:
created_at > SYSDATE + 30
join on u.id = b.id
)相同 id 的表用户记录,其中列端点等于XYZ
必须有列delay_until满足older than now
标准。 如果端点不等于XYZ
,则仅适用第一个条件。我提出了以下查询:
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;
这是我的架构(简化):
我的查询是否符合预期? 可以重写以使其更快吗? 如果是这样,如何?
我认为这就是你想要的:
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;
过滤ON
子句中的第一个表对LEFT JOIN
没有意义。
对于此查询,您需要关于users(endpoint, created_at, id)
和blacklist(id, delayed_until)
索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.