是否有一个函数,最好是在Oracle中,如果满足5个条件中的任何3个条件,我们可以选择行?

如果满足 5 个条件中的任何 3 个,我必须连接两个表并选择行。我当然可以在where子句中组合 AND 和 OR ,但这听起来效率很低。有没有可以做到这一点的功能?伪代码如下。

select * from tableA a,tableB b 
where a.id=b.id 
and /* if any 3 out of these 5 conditions are met: a.num = b.num, a.cat=b.cat, 
a.sun=b.sun, a.mon=b.mon, a.jan=b.jan */

回答

没有特定的功能,这是一种可能性:

SELECT  a.*, b.*
  FROM tablea a
       JOIN tableb b ON a.id=b.id 
 WHERE
       (CASE WHEN a.num = b.num THEN 1 ELSE 0 END + 
        CASE WHEN a.cat=b.cat THEN 1 ELSE 0 END + 
        CASE WHEN a.sun=b.sun THEN 1 ELSE 0 END + 
        CASE WHEN a.mon=b.mon THEN 1 ELSE 0 END + 
        CASE WHEN a.jan=b.jan THEN 1 ELSE 0 END) > 2 

这将为您提供满足 2 个以上条件的任何行。

注意:使用 ANSI 样式的连接,它使您的查询更具可读性。


以上是是否有一个函数,最好是在Oracle中,如果满足5个条件中的任何3个条件,我们可以选择行?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>