对每个人都很好,在此先感谢您的关注。 我的问题如下:
我有一个表,其中包含约700个具有自动递增ID的数据,并具有以下字段:
| id | pos_1 | pos_2 | pos_3 |
+------+------+------+------+
| 1 | 9 | 2 | 3 |
| 2 | 3 | 2 | 9 |
| 3 | 1 | 4 | 3 |
| 4 | 1 | 2 | 3 |
| 5 | 5 | 1 | 6 |
| 6 | 1 | 2 | 3 |
| 7 | 8 | 2 | 0 |
| ...| ... | ... | ... |
| etc| etc | etc | etc |
+------+------+------+------+
碰巧,我总是执行包含多个选择和一个共同条件的查询,所有这些都由“ UNION”以这种方式结合在一起:
from listado T1
where pos_1 = *** and pos_2 = *** and pos_3 = *** and exists (
select id
from listado T2
where
T2.pos_1 = *** and pos_2 = *** and pos_3 = ***
and T2.id >= T1.id - 10
and T2.id <= T1.id + 10
and T1.id != T2.id )
UNION
select *
from listado T3
where pos_1 = *** and pos_2 = *** and pos_3 = *** and exists (
select id
from listado T4
where
T4.pos_1 = *** and pos_2 = *** and pos_3 = ***
and T4.id >= T3.id - 10
and T4.id <= T3.id + 10
and T3.id != T4.id )
UNION
select *
from listado T5
where pos_1 = *** and pos_2 = *** and pos_3 = *** and exists (
select id
from listado T6
where
T6.pos_1 = *** and pos_2 = *** and pos_3 = ***
and T6.id >= T5.id - 10
and T6.id <= T5.id + 10
and T5.id != T6.id )
ORDER BY id ASC
以这种方式返回与我在表的相应位置(pos_1,pos_2,pos_3)中输入的数字相匹配的行,但条件是此搜索的结果不与每个ID彼此之间有10个位置,您可以看到我对片段的处理方式
and T***.id <= T***.id + 10
and T***.id != T***.id )
到目前为止,所有内容都是正确的,问题是在完成此查询后,我返回的结果是彼此独立的SELECTS,也就是说,它仅显示我分别咨询的数据GROUPED SELECTS其他...我的意思是,如果那样的话,您将忽略所有混合3个SELECTS行的结果,因为它应该出现在表中。我分别得到结果,我需要将SELECTS合并为单个SELECT,并且不要将我分开并将结果分成三个不同的SELECTS ...,而且我不知道如何容纳查询。 。共享一个条件,即结果之间的ID相差不超过10个位置,并且共同(例如,如果选择SELECTnº1的结果行在SELECTNº2或Nº3的行之内)在表格中...
谢谢:)
答案 0 :(得分:0)
感谢您的关注。最后的示例只是简单地说明了这3个选择中的每一个的结果都不是分离和独立的,而是将3个选择的结果混合在一起,就好像它是单个广泛选择一样。 并且在3个条件相同的情况下,结果之间的ID位置不得超过10个。
如果我要您搜索行: 第一次选择:0-1-4 第2选择:2-4-8 第三选择:3-5-6
查询完成后,您现在将执行的操作将显示以下内容:
82 0 1 4
83 0 1 4
86 0 1 4
另一方面:
16 2 4 8
20 2 4 8
24 2 4 8
另一方面:
256 3 5 6
260 3 5 6
262 3 5 6
如果您查看结果,则显然它们是正确的,因为它们向我展示了我所要的内容,并且这些结果按不超过10个位置的ID分组。 但是,这会忽略所有混合结果,因此出现在表中的结果如下:
82 0 1 4
84 3 5 6
86 0 1 4
89 3 5 6
--- --- --- ---
90 3 5 6
91 2 4 8
最后一个结果将是正确的,因为它将位于表中,这些行是应该出现在数据列表中的行,并且仅向我显示行组,因为它是所有可能的行中的唯一一个接下来几乎是按ID = 10分组的。