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'
)