如何在mysql中创建子查询?

时间:2016-01-23 09:49:07

标签: mysql subquery

我有一张像这样的表:

|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行。

我知道这很难,但我该怎么办?

1 个答案:

答案 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_%')