2

次のクエリを実行しようとしています。

select * from (select * from customquestionbank where questionid=6 or secondquestionid=6 
union select * from customquestionbank where questionid=5 or secondquestionid=5 
union select * from customquestionbank where questionid=10 or secondquestionid=10 
union select * from customquestionbank where questionid=11 or secondquestionid=11) Tabled

このサイトを初めて利用するため、まだ画像を投稿できませんが、結果は次のようになります。

questionid -> 5,6 ,10,11

ただし、上記のselectステートメントと同じ順序で結果を表示したいと思います。つまり、questionid = 6が最初に返され、次に5が返されます。

4

5 に答える 5

2

すべてのユニオンは必要ありません。次のようにしてください。

SELECT DISTINCT * 
FROM   customquestionbank 
WHERE  questionid IN ( 6, 5, 10, 11 ) 
        OR secondquestionid IN ( 6, 5, 10, 11 ) 
ORDER  BY CASE 
            WHEN 6 IN ( questionid, secondquestionid ) THEN 0 
            WHEN 5 IN ( questionid, secondquestionid ) THEN 1 
            WHEN 10 IN ( questionid, secondquestionid ) THEN 2 
            WHEN 11 IN ( questionid, secondquestionid ) THEN 3 
          END 
于 2012-05-25T07:55:07.473 に答える
0

に置き換えUnionますUnion ALL

create table #t
(
    id int
)
insert into #t(id)values(5)
insert into #t(id)values(2)
insert into #t(id)values(4)
insert into #t(id)values(3)

Select * from
(
    Select * from #t where id = 5
    uNION All
    Select * from #t where id = 2
    uNION All
    Select * from #t where id = 4
    uNION All
    Select * from #t where id = 3
)K

DROP TABLE #t
于 2012-05-25T10:09:53.327 に答える
0

使用しているスーパーセレクトを削除します

クエリを次のように記述します

Select * from query1 union
Select * from query2 union
Select * from query3;

これにより、必要に応じて結果が得られます

それ以外の場合はこれを試してください

Select col1,col2 from( Select 1,q1.* from query1 q1 union
Select 2,q2.* from query2 q2 union
Select 3,q1.* from query3 q3)

スーパークエリで必要な列のみを選択する

于 2012-05-25T07:53:33.790 に答える
0

RDBMS がVALUESコンストラクターをサポートしている場合

SELECT questionid, secondquestionid
FROM   (VALUES(6,1), 
              (5, 2), 
              (10, 3), 
              (11, 4)) V(q, ord) 
       JOIN customquestionbank 
         ON q IN ( questionid, secondquestionid ) 
GROUP BY questionid, secondquestionid         
ORDER  BY MIN(ord)
于 2012-05-25T08:00:13.673 に答える
0

RDBMS が の場合、次のようmysqlに試すことができると思います。ORDER BY FIELD

SELECT *
FROM customquestionbank
WHERE
  questionid IN(6, 5, 10, 11)
  OR secondquestionid IN(6, 5, 10, 11)
ORDER BY FIELD(questionid, 6) ASC
于 2012-05-25T08:04:52.940 に答える