SQL查询,具有多列的通用过滤器

时间:2018-02-27 10:18:00

标签: sql postgresql

以下查询中的过滤器完全相同。

select * from t_profile where 
profile_id in        (select profile_id from t_profile ...) or 
active_profile_id in (select profile_id from t_profile ...);

我们可以避免重复过滤器吗?

3 个答案:

答案 0 :(得分:2)

您可以使用common table expression

VIEW

答案 1 :(得分:0)

你可以加入:

SELECT * FROM T_profile1 AS t1
JOIN T_Profile2 AS t2
ON t1.profile_id = t2.profile_id 
 OR t1.active_Profile_id = t2.profile_id

如果您不想重复列,可以执行单独的查询和UNION它们

SELECT * FROM T_profile1 AS t1
JOIN T_Profile2 AS t2
ON t1.profile_id = t2.profile_id

UNION

SELECT * FROM T_profile1 AS t1
JOIN T_Profile2 AS t2
ON t1.active_Profile_id = t2.profile_id

我建议您阅读https://www.w3schools.com/sql/default.asp了解更多SQL基础知识

答案 2 :(得分:0)

您可以使用exists而非in

来避免重复过滤
select p.*
from t_profile p
where exists (select 1
              from t_profile p2 . . .
              where p2.profile_id = p.profile_id or
                    p2.profile_id = active_profile_id
             );

也就是说,使用inexists重复过滤器可能是更好的选择。