select ((((v1 + v2) % '10'::bigint) IS NOT NULL) AND (((v1 + v2) % '10'::bigint) >= '0'::bigint) AND (((v1 + v2) % '10'::bigint) < '1'::bigint)) from test where v1 = 100 and v2 = 100; ?column? ---------- t (1 row) но при этом # explain analyze select * from test where v1 = 100 and v2 = 100; QUERY PLAN -------------------------------------------------------------------------------------------------------- Append (cost=0.00..52.11 rows=2 width=48) (actual time=0.012..0.019 rows=1 loops=1) -> Seq Scan on test_1 (cost=0.00..26.05 rows=1 width=48) (actual time=0.011..0.011 rows=1 loops=1) Filter: ((v1 = 100) AND (v2 = 100)) -> Seq Scan on test_2 (cost=0.00..26.05 rows=1 width=48) (actual time=0.006..0.006 rows=0 loops=1) Filter: ((v1 = 100) AND (v2 = 100)) Rows Removed by Filter: 1 Planning Time: 0.140 ms Execution Time: 0.043 ms (8 rows)
where v1 = 100 and v2 = 100 думаю postgres не настолько умный что бы из v1 = 100 and v2 = 100 вывести что это тоже самое что (v1 + v2) % 10 = 0
Обсуждают сегодня