具有相同条件的多个SELECT

时间:2019-04-05 23:55:51

标签: sql mysqli

对每个人都很好,在此先感谢您的关注。 我的问题如下:

我有一个表,其中包含约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的行之内)在表格中...

谢谢:)

1 个答案:

答案 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分组的。