0
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 中,小于等于的数字较低,大于等于的数字较高。

我希望能够用一个数字设置查询 2 中要满足的最小重合数。例如,查询 2 必须满足 5 个重合才能最终在查询 1 中进行选择。

如果有更简单的方法来实现这一目标,这与范围和匹配计数有关。

4

3 回答 3

0

尝试使用本机 MySQL 函数BEETWEN

SELECT * FROM t1 WHERE key_col BETWEEN '2' AND '3';
于 2012-10-23T12:32:50.980 回答
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

可能使用第一个查询作为子选择而不是表。

编辑-阅读您的最新回复,我想我误解了您的要求。但是,您可能会找到每个值之间的差异,获取每个差异的绝对值并将它们加在一起以查看差异的接近/远近。

于 2012-10-23T12:37:23.013 回答
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
于 2012-10-23T12:39:46.740 回答