Несколько ВЫБОРОВ с одинаковыми условиями - PullRequest
0 голосов
/ 06 апреля 2019

Хорошо всем и заранее спасибо за ваше внимание.У меня такой вопрос:

У меня есть таблица с приблизительно 700 данными с автоинкрементным идентификатором и с этими полями:

| 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) таблицы, НО с условием, что РЕЗУЛЬТАТЫ этого поиска не ОТЛИЧАЮТСЯ друг от друга более 10 ПОЗИЦИЙ на ID, как вы можете видеть, что я делаю с фрагментом:

        and T***.id <= T***.id + 10
 and T***.id != T***.id )

До сих пор все правильно, проблема в том, что при выполнении этого запроса, как он сделан, РЕЗУЛЬТАТЫ, которые я возвратил, являются SELECTS независимо друг от друга, то есть, он показывает только те данные, к которым я обращаюсь индивидуальноГРУППОВЫЕ ВЫБОРЫ других ... Я имею в виду, что вы пропускаете ВСЕ результаты, которые смешивают строки 3 ВЫБОРОВ, если этотак и должно быть, потому что он отображается в таблице.Я получаю результаты ОТДЕЛЬНО, и мне нужно, чтобы ВЫБОРЫ были объединены в один ВЫБОР, а не разделяли меня и не делили результаты на три разных ВЫБОРКА ... и я понятия не имею, как выполнить запрос, чтобы сделать это ..Совместное использование условия, чтобы результаты не отличались друг от друга идентификатором более чем на 10 позиций и совместно ДЛЯ ПРИМЕРА строка результата SELECT nº1 находится в пределах строки результата SELECT Nº2 или Nº3, если это должно быть, потому что это такВ таблице ...

Спасибо:)

1 Ответ

0 голосов
/ 06 апреля 2019

спасибо за ваше внимание.Пример в конце состоит просто в том, что результат каждого из этих трех выборов не разделен и независим между ними, но что результаты этих трех смешаны, как если бы это был один широкий выбор.И с тем же условием, что 3 разделяют, что результаты не имеют более 10 позиций идентификатора между ними.

Если я попрошу вас выполнить поиск строк: 1-й ВЫБОР: 0 - 1 - 4 2-йВЫБОР: 2 - 4 - 8 3-й ВЫБОР: 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 позиций.Но это исключение всех результатов, которые смешаны и поэтому отображаются в таблице, как, например, было бы:


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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...