Select * FROM table WHERE a<=9 AND a>=4 AND b<=20 AND b>=16 AND c<=30 AND c>=26
现在我想最终从查询1中选择满足以下至少两个条件的结果。
Select * FROM table WHERE a<=7 AND a>=5 AND B<=19 AND B>=17 AND C<=29 AND c>=27
数字可以是任何数字,但在查询2中,这些数字低于eqaul而较高等于大于等于。
我希望能够设置在查询2中使用数字满足的最小重合次数。 例如,在查询2中必须满足5个重合,以便最终在查询1中进行选择。
这是关于范围和匹配计数,如果有更简单的方法来实现这一点。
答案 0 :(得分:0)
尝试使用原生MySQL函数BEETWEN:
SELECT * FROM t1 WHERE key_col BETWEEN '2' AND '3';
答案 1 :(得分:0)
认为第二次查询需要这样: -
Select *, CASE WHEN a<=7 THEN 1 ELSE 0 END + CASE WHEN a>=5 THEN 1 ELSE 0 END + CASE WHEN B<=19 THEN 1 ELSE 0 END + CASE WHEN B>=17 THEN 1 ELSE 0 END + CASE WHEN C<=29 THEN 1 ELSE 0 END + CASE WHEN c>=27 THEN 1 ELSE 0 END AS MatchCount
FROM table
WHERE a<=7
OR a>=5
OR B<=19
OR B>=17
OR C<=29
OR c>=27
HAVING MatchCount >= 2
可能使用第一个查询作为子选择而不是表。
编辑 - 阅读您的最新回复我认为我误解了您的要求。但是,你可以找到每个值之间的差异,得到每个差异的绝对值,并将它们加在一起,看看这些差异有多近/远。
答案 2 :(得分:0)
我认为这种查询会完成你的工作
Select
*,
(IF(a<=7 AND a>=5,1,0) + IF(B<=19 AND B>=17,1,0) + IF(C<=29 AND c>=27,1,0))
as totalmatch
FROM table
HAVING totalmatch >=2