对每个人都有益,并提前感谢您的关注。我的问题如下:
我有一个表,其中包含大约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个POSITIONS,你可以看到我对片段的处理方式:
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的结果行内,如果它应该是因为它是如此在表格中......
谢谢 :)
感谢您的关注。最后的例子很简单,这三个选择中的每一个的结果在它们之间没有分离和独立,但是3的结果混合在一起,好像它是单个宽选择。并且具有相同的条件,即3分享结果在它们之间没有超过10个id位置。
如果我要求你搜索行:1st SELECT:0 - 1 - 4 2nd SELECT:2 - 4 - 8 3rd SELECT: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分组。