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]基づいて間隔を取得することです。サブクエリは機能しますが、「オペランドには1つの列のみを含める必要があります」というエラーが発生しているため、クエリ自体に問題があると思います。私はそれを理解していますが、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

あなたの問題は、2 つの値を取得していることですが、セットではなくリストとして取得しています。SQL オプティマイザは、1,3 が 1 つの行に表示されている場合、2 つの項目のセットとして認識できません。キャストが必要な場合もあります。

これはうまくいくはずです。

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 に答える