簡體   English   中英

具有相同條件的多個 SELECTS

[英]Multiple SELECTS with same condition

我有一個包含大約 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”以這種方式聯合起來:

select *
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 + 10
 and T***.id != T***.id )

到這里一切都是正確的,問題是在完成這個查詢時,我返回的 RESULTS 是彼此獨立的 SELECTS,也就是說,它只向我顯示我單獨查閱的數據 GROUPED SELECTS of others 。 .. 我的意思是你省略了所有混合 3 個 SELECTS 行的結果,如果這是應該的方式,因為它出現在表中。 我單獨得到結果,我需要將 SELECTS 合並為一個 SELECT 並且不要將我分開並將結果分成三個不同的 SELECTS ...我不知道如何適應查詢來這樣做.. . 共享結果不因 ID 不同而超過 10 個位置的條件,並且共同例如,SELECT nº1 的結果行在 SELECT Nº2 或 Nº3 的結果行內,如果應該是因為它是這樣在表中。

感謝您的關注。 最后的例子很簡單,這 3 個選擇中的每一個的結果都不是在它們之間分離和獨立的,而是將 3 個的結果混合在一起,就好像它是一個單一的廣泛選擇一樣。 並且在相同的條件下,3 個共享結果之間的 id 位置不超過 10 個。

如果我讓你搜索行: 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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM