具有相同条件的多个SELECTS

问题描述 投票:0回答:1

对每个人都有益,并提前感谢您的关注。我的问题如下:

我有一个表,其中包含大约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的结果行内,如果它应该是因为它是如此在表格中......

谢谢 :)

sql mysqli
1个回答
0
投票

感谢您的关注。最后的例子很简单,这三个选择中的每一个的结果在它们之间没有分离和独立,但是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分组。

© www.soinside.com 2019 - 2024. All rights reserved.