我有一个 SQL 查询,其中字符串列表重复两次:
('foo', 'bar', 'baz', 'bletch')
。 最可维护的方法是什么来避免这种重复并使代码更加DRY?
我不是在优化查询性能,只是在优化可维护性。
select
*
from
gizmo_details
where
_gizmo_name in ('foo', 'bar', 'baz', 'bletch')
or gizmo_id in
(select id from gizmos where
gizmo_name in ('foo', 'bar', 'baz', 'bletch'));
您可以将其移至单行子查询中的数组文字并重新使用其名称:demo
select * from gizmo_details
cross join (values ('{foo,bar,baz,bletch}'::text[]))_(string_arr)
where _gizmo_name=any(string_arr)
or gizmo_id in(select id from gizmos where gizmo_name=any(string_arr));