作者:123456ws1043 | 来源:互联网 | 2023-10-09 20:08
如果满足 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 样式的连接,它使您的查询更具可读性。