如果我有以下玩具查询
SELECT *
FROM my_tables
WHERE my_id in (
SELECT my_other_id
FROM my_other_tables
) AND some_slow_func(arg) BETWEEN 1 AND 2;
WHERE 子句中的第一个条件是否会使运行时间复杂的第二个条件短路?
我正在处理一些实际上是 plpgsql 中 FOR LOOP 的一部分的 sql,我可以对 my_other_tables 中存在的所有记录进行迭代,然后使用 some_slow_func() 在 FOR LOOP 的范围内进行测试。但是我很好奇sql是否支持,或者plpgsql是否支持短路。
一些研究:我查看了 Postgres 邮件列表,发现这句话 SQL 通常不支持短路:
http://www.postgresql.org/message-id/171423D4-9229-4D56-B06B-58D29BB50A77@yahoo.com
但是其中一个回复说可以通过子选择强制执行顺序。我不确定他在说什么。我知道子选择是什么,但我不确定如何执行顺序?有人可以为我澄清一下吗?