1

我想从内容如下的表中运行查询:

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

目的是根据返回存储在for和中的内容[id-1, id+1]的列获取间隔。子查询有效,但我想我的查询本身有问题,因为我有一个错误“操作数应该只包含一列”。我明白了,但我没有在一个查询中看到任何其他方法?idcol1id-1id+1

我很确定有一个非常简单的解决方案,但我暂时无法弄清楚,即使在仔细阅读了有关多列子查询的其他帖子之后......

感谢您的任何帮助 :-)

4

2 回答 2

1

我现在能想到的唯一方法是这样的:

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
于 2011-10-30T22:05:07.617 回答
0

您的问题是您正在检索两个值 - 但作为一个列表而不是一个集合。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'
)
于 2011-10-30T22:06:37.423 回答