我有一张像这样的表:
|col1 |id |
--------------------
|_22_1_565_18_|1 |
|_22_1_18_ |2 |
|_77_18_ |3 |
|_22_1_55_45 |4 |
|_18_1_65_13_ |5 |
|_782_8_ |6 |
|_782_1_8_21_ |7 |
|_72_1_8_21_ |8 |
|_782_8_251_ |9 |
|_22_4_1_ |10 |
|_77_1_5_21_ |11 |
|_5_6_7_ |12 |
col1总是包含由“_”字符分隔的数字(一个在后面,一个在您看到之前)。我需要写一个查询:
1)选择包含字符串“ 18 ”的所有行(在本例中为第1,2,3,5行)
2)找出“ 18 ”选择行中最常见的2个字符串序列(在本例中为“ 22 ”和“ 1 “字符串”
3)选择不包含字符串“ 18 ”但包含公共字符串“ 22 ”和“ 1 ”的所有行(在这种情况下是行4,10)
4)要添加到所选行,接近它们的id接近度,特别是后面的2行和每行之前的2行,总是排除包含“ 18 的行“(在这种情况下是行6,8,9,11,12)
在这种情况下,查询的最终结果是第4,10,6,8,9,11行。
我知道这很难,但我该怎么办?
答案 0 :(得分:1)
1)
select * from table
where col1 like '%_18_%'
2)
select * from table
where col1 like '%_22_%' and col1 like '%_1_%'
3)
select * from table
where col1 not like '%_18_%'
and (col1 like '%_22_%' and col1 like '%_1_%')
4)
select * from table
where col1 not like '%_18_%'
or (col1 not like '%_22_%' and col1 not like '%_1_%')