MySQL: интервал вокруг столбца id и возврат другого из подзапроса с несколькими столбцами

Я хотел бы запустить запрос из таблицы, где содержание выглядит так:

id | col1 | col2 | col3
-----------------------
1  | i_11 | i_12 | i_13
2  | i_21 | i_22 | i_23
3  | i_31 | i_32 | i_33
.. | ...  | ...  | ...

SELECT col1 FROM table WHERE id IN
(SELECT id-1, id+1 FROM table WHERE col1='xxx' AND col2='yyy' AND col3='zzz')

Цель состоит в том, чтобы получить интервал [id-1, id+1] на основе id столбец, который возвращает содержимое, сохраненное в col1 за id-1 а также id+1, Подзапрос работает, но я думаю, что у меня есть проблема с самим запросом, так как у меня появляется ошибка "Операнд должен содержать только один столбец". Я понимаю, но я не вижу другого способа сделать это в одном запросе?

Я вполне уверен, что есть довольно простое решение, но пока не могу понять, даже после того, как внимательно прочитал другие посты о подзапросах множественных столбцов...

Спасибо за любую помощь:-)

2 ответа

Решение

Единственный способ, которым я могу думать, чтобы сделать это прямо сейчас, это так:

SELECT col1 
FROM table T
WHERE id BETWEEN (SELECT id FROM table WHERE col1='xxx' AND col2='yyy' AND col3='zzz') -1 
    and (SELECT id FROM table WHERE col1='xxx' AND col2='yyy' AND col3='zzz') +1

Ваша проблема в том, что вы получаете два значения - но не как набор, а как список. Оптимизатор SQL не может видеть 1,3 как набор из двух элементов, когда они представлены в одной строке. Также может быть необходим актерский состав.

Это должно работать.

SELECT col1 FROM table WHERE id in 
(
    select cast(id as int) -1 from table where col1='i_21'
    union
    select cast(id as int) +1 from table where col1='i_21'
)
Другие вопросы по тегам