以下查询中的过滤器完全相同。
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 ...);
我们可以避免重复过滤器吗?
答案 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
);
也就是说,使用in
或exists
重复过滤器可能是更好的选择。