mysql查找匹配

时间:2012-05-31 16:58:47

标签: mysql

我有一个像这样的数据库列:

id
50
55
56
62
63
64
65
68
70
72
80

etc...

我想使用以下公式遍历id列,以查找公式的结果是否是同一列中的id号。我想计算id列中基本上3条记录的所有可能组合。

第一循环: ((second_id_number - first_id_number)*变量十进制)+ second_id_number是否等于id列中的数字?

根据公式,第一个循环是 (55-50)* 2.00(作为变量十进制的例子)+ 55 = 65. 65在列表中=> 65被标记为等于它的2条记录

第二循环: ((third_id_number - first_id_number)*变量十进制)+ second_id_number是否等于id列中的数字? (56-50)* 2.00(作为变量十进制的例子)+ 56 = 78. 78不在列表中=> 78未标记

第三循环: ((fourth_id_number - first_id_number)*变量十进制)+ second_id_number是否等于id列中的数字?

等...

我希望结果显示所有标记的记录。标记记录是3条记录的集合,其中第三条记录是公式的结果。

有人有任何想法吗?在mysql中可以吗?

谢谢

2 个答案:

答案 0 :(得分:0)

如果我正确理解你的要求,听起来你想在桌子上使用自我加入,例如。

SELECT ...
FROM yourtable AS parent
LEFT JOIN yourtable AS child ON
    FLOOR((parent.second_id_number - parent.first_id_number) * variable) + parent.second_id) = child.id

答案 1 :(得分:0)

你可以携带这样的东西,这可以满足你的第一个“循环”

select a.id as first_id_number
    , b.id as second_id_number
    , ((b.id - a.id) * 2) + b.id as third_id_number
from my_table as a
    join my_table as b on a.id = (select max(id) from my_table where id < b.id)
where ((b.id - a.id) * 2) + b.id in (select id from my_table)

根据您的描述和测试数据,这将显示65为“标记”,其中first_id_number为50和62.

警告:使用我认为的语言在SQL Server上完成是相当标准的语法。我会理解是否有人宁愿将此短语称为与where子句中的select max...位交叉连接而不是连接谓词。