sql хранить вложенный набор результатов подзапроса select в переменную - PullRequest
0 голосов
/ 07 ноября 2019

Я пытаюсь получить next/previous запись из набора результатов, который является выводом внутреннего запроса выбора.

Вот мой запрос:

select qs.*
from
(
    select
       tsk.id,
       tsk.request_id,
       tsk.category_group,
       tsk.category,
       tsk.hash_id 
    from
       user_tasks as usr 
       inner join
          unassigned_tasks as tsk 
          on usr.task_id = tsk.id 
    where
       usr.assigned_to = 12        
    AND 
        BINARY hash_id NOT IN ( SELECT hash_id FROM product_match_unmatches WHERE request_id = tsk.request_id AND auto_unmatched_by IS NOT NULL )
) as qs

WHERE qs.id = ( SELECT min(qs.id) FROM qs WHERE qs.id > 5181 )

Если внутренний запрос возвращаетрезультирующий набор со значениями как:

id
------
4179
4280
5181
6182
6283

Затем мне нужно выбрать строку с помощью id 6182.

Но похоже, я должен снова упомянуть внутренний запрос внутри внешнего запроса.

Есть ли другой способ?

1 Ответ

0 голосов
/ 07 ноября 2019

Если вы хотите выбрать второе-последнее значение вашего внутреннего запроса, вы можете использовать нумерацию строк, используя переменную сеанса: (нумерация зависит от порядка строк вашего данного внутреннего запроса)

set @rank = 0;
select
    tsk.id,
    tsk.request_id,
    tsk.category_group,
    tsk.category,
    tsk.hash_id
from (
        select
               tsk.id,
               tsk.request_id,
               tsk.category_group,
               tsk.category,
               tsk.hash_id,
               @rank := @rank + 1 as rank
            from
               user_tasks as usr 
               inner join
                  unassigned_tasks as tsk 
                  on usr.task_id = tsk.id 
            where
               usr.assigned_to = 12        
            AND 
                BINARY hash_id NOT IN ( SELECT hash_id FROM product_match_unmatches WHERE request_id = tsk.request_id AND auto_unmatched_by IS NOT NULL )
    )tbl
    where rank = @rank - 1;

Вы можете получить желаемый результат, используя такой запрос. :) спасибо

...