2011-07-20 31 views
2
SELECT u.id 
FROM user u 
WHERE u.id IN 
((SELECT l.id FROM location l WHERE l.id = ?id ORDER BY l.idLocation DESC)) 

私がしたいことは、このオーダーを作品化することです。しかし、ビューの内側で注文することはできません。ビューの中にいなければ、この注文をどうやって行うことができますか?サブクエリ内で並べ替え

SQLの応答:

メッセージ1033、レベル15、状態1、行5は、ORDER BY句は ビュー、インライン関数、派生テーブル、サブクエリ、および共通テーブル 式で無効です、 TOPまたはFOR XMLも指定されている場合を除きます。

+0

あなたは、サブクエリを意味しますか?私はここにビューが表示されません。 – Oded

+1

「ORDER BY」作業をどのようにして出力に影響させるかはわかりません。あなたが今得ているアウトプットの例と、それがどう違うのかを教えてください。 'IN'ステートメントの中で' ORDER BY'は "働いていても"問題ではないので、混乱した答えを得るでしょう。 –

+0

+1 @ChrisCunningham - OP、u.idがsubselectの結果に含まれているかどうかを単に確認しているので、元のクエリから結果がどのような順序であるかはわかりません。 – jinglesthula

答えて

6

できません。 のうち最も外側の注文のみが問題です。

従ってSELECT * FROM MyView ORDER By Whateverです。

どれ中間発注(BYまたはORDER偶然か、またはLANの一部)ここで二つの問題があります

+0

ありがとうございます。私は貧しい、私はそれをする別の方法を見つける必要があるだろう。 – pringlesinn

+1

@pringlesinn - do **何**?それは現時点では大きな謎です。 –

+0

私は記事のテーブルを持っていて、それらをA-ZまたはZ-Aの順序で表示する必要がありますが、一度に100を選択したいと思います。外部からの注文は、選択した100のみを注文します。それはどのように行うのですか? – Cheeku

6

を無視しています。

1 - ORDER BYは無意味です。サブクエリINを使用する場合、ORDERは無関係です。

2 - ビューのORDER BYは、ビュー自体ではなく、呼び出し側のクエリに含める必要があります。

0

私は一般的にサブクエリでorder byを行うには良いアイデアではないことを、以前の答えと意見を共有しています。しかし、私はそれを行うことが非常に有用であることが分かっています。私はサンプルクエリを仮定しますpringlesinnさんの質問はより複雑な要件の簡単な例です。あなたは、サブクエリでorder byをこの方法で行うことができます。

SELECT u.id 
FROM user u 
WHERE exists 
(SELECT ROW_NUMBER() OVER (ORDER BY l.idLocation DESC) FROM location l WHERE u.id = l.id and l.id = ?id) 

あなたはWHERE句は、もはや「IN」と演算子を使用していることが気づかないでしょう。代わりに、 'EXISTS'を使用して相関サブクエリを実行する必要があります。それとも、このような何か行うことができます:

SELECT u.id 
FROM user u inner join 
    (
    SELECT ROW_NUMBER() OVER (ORDER BY l.idLocation DESC) as rowid, l.id 
    FROM location l 
    WHERE l.id = ?id 
) as z on z.id = u.id 

最高の願いを、 ジェームズ

+0

** gbn **のように、 'order by'は内部クエリでは無視されます。これら2つのコードスニペットの実行計画を確認し、「順序付け」が削除されたように見えました。しかし、私は、上記のアプローチをはるかに複雑な状況で使用することが、その課題を達成する最良の方法であったことを思い出しています。がんばろう! –

関連する問題