2012-02-13 6 views
3

を作成するために参加する:変換サブクエリは、私は、ネストされたSQLクエリを持っているビュー

SELECT * 
FROM 
(
    SELECT * 
    FROM asset_status 
    ORDER BY session_id DESC 
) tmp 
GROUP BY asset_id, workflow_element_id 

私はこのクエリからビューを作成したいと思いますが、MySQLはビュー内のサブクエリを許可していないようです。これを結合にどのように変換できますか?

+1

asset_statusの列は何ですか? –

答えて

2

SQL Serverでは、ビューでサブクエリを使用できます。あなたが行うことができない何か、SELECT *GROUP BY a, b

あなたは(私は最小限の変更を行いますので、私はこれはあなたの全体のクエリではないと仮定します)...

SELECT asset_id, workflow_element_id 
FROM 
(
    SELECT * 
    FROM asset_status 
    -- ORDER BY session_id DESC (Removed as innefective in a view) 
) tmp 
GROUP BY asset_id, workflow_element_id 

を試してみましたさ

また、内側のクエリでは、ORDER BYがinnefective(そしておそらくさえDIS-許可)であることに注意し、外側のクエリが再度順番に許可されているとして、それは(それは常にはには戻ってこないます別の注文ですが、このレイアウトはありませんguarnateeあなたが望むような注文)。外部クエリでも、の場合は、ビューを使用するときに結果が順序になりますが、オプティマイザは結果を並べ替えることができます。 ORDER BYはビューを使用して、クエリである場合を除き、順序は絶対に ...

SELECT * FROM view ORDER BY x 


最後に、あなたはLEFTとしてこれをタグ付けされた保証はありませんれる質問を登録しよう。より完全なコード例があれば、誰かが代替レイアウトを提案すると確信しています。しかし、私は数日のうちに今オフになっています。がんばろう! :)

+0

+1確かに..そのクエリは正しくありません! –

+2

これはMySQLであり、SQLServerではありません。 –

+0

私の間違い、お詫び申し上げます – MatBailie

0

内部オーダーbyは全く使用されないため、サブクエリは必要ありません。あなたは書くことができます:

SELECT DISTINCT asset_id, workflow_element_id 
FROM asset_status 

をあなたはsession_idで注文する必要がある場合は、合計で例えばmaxそれを含める必要があります。

SELECT asset_id, workflow_element_id 
FROM asset_status 
GROUP BY asset_id, workflow_element_id 
ORDER BY MAX(session_id) DESC 
+0

私はサブオーダーをオーダーのためだけに追加しました。 by orderは保証されていないと言っていますので、私は集計 'max 'を試してみます – arjunurs

0

(またはグループ内で)the MySQL reference manualによると、あなたはなく、FROM句で、サブクエリを使用してビューを作成することができます。

はしたがって、私はあなたが以下のようなビューを作成する必要があると思う:

select a.* 
from asset_status a 
join (select asset_id, workflow_element_id, MAX(session_id) session_id 
     from asset_status 
     group by asset_id, workflow_element_id) sq 
    on a.session_id = sq.session_id 

しかし、それはおそらくあなたの元のクエリようには実行されません。

+0

あなたのクエリはどのようにsession_idのソート順を扱いますか?このクエリは、予想されるレコードを返しません。私はさまざまなワークフローの資産のステータスを取得しようとしています。これらの結果は最新のセッションからのものである必要があります。 – arjunurs

+0

@apurv:元のクエリは、asset_idとworkflow_element_idの組み合わせごとに最新のasset_statusレコード(つまり、最高のsession_idを持つ)を返すように設計されているようです。グループ化と組み合わせたmax(session_id)の使用は、asset_idとworkflow_element_idの組み合わせごとに最高のsession_idを選択する必要があります。このクエリの結果は、予想される結果とどう違うのですか?質問にサンプルデータを含めることはできますか? –

関連する問題