0

他の開発者が作成した次のクエリを使用しています。

SELECT DISTINCT c.id category_id,
  c.parent_id,
  d.name AS category_name,
  level
FROM category c,
  category_language d
WHERE c.id                                 = d.category_id
AND c.is_active                            = 1
AND c.is_deleted                           = 0
AND c.deleted_date                        IS NULL
AND d.is_active                            = 1
AND d.is_deleted                           = 0
AND d.deleted_date                        IS NULL
AND ((to_date(d.expiry_date,'DD-MON-YYYY') > to_date(sysdate,'DD-MON-YYYY'))
OR d.expiry_date                          IS NULL)
AND d.language_id                          = 1
AND c.cat_type_id                          = 1
  START WITH c.parent_id                   =1308206844
  CONNECT BY c.parent_id                   = prior c.id
ORDER SIBLINGS BY d.name 

私には2つの問題がありました。

まず、クエリでSTART WITHCONNECT BYPRIORキーワードがどのように機能しているかわかりません。

次に、ORDER SIBLINGS BY d.nameORDER SIBLINGS BY c.priority descに変更すると、次のエラー メッセージがスローされます:=

ORA-01791: not a SELECTed expression
01791. 00000 -  "not a SELECTed expression"

また、優先度のデータ型を数値から文字列に変更しようとしましたが、同じエラーがスローされます。

目的の結果を生成するために、 c.priority desc で順序のクエリを実行したいと考えています。

4

1 に答える 1

3

キーワードSTART WITH, CONNECT BY, PRIORは、階層を表示するために使用されます。私の意見では、このリンクは本当に良いチュートリアルです: http://www.adp-gmbh.ch/ora/sql/connect_by.html

少なくとも、例に従って使用方法を学びました。おそらく、これはORDER SIBLINGS BY実際に何を意味するのかという答えも与えてくれるので、エラーメッセージを回避する方法を自分で答えることができます. どうやらOracleは、選択した列に列を含めることを望んでいます。ORDER SIBLINGS階層に固有のものであり、グーグルで検索できます。しかし、私はあなたが最初に学ぶ必要があると思いますSTART WITH, CONNECT BY, PRIOR

たぶん、あなたはやりたくないのですORDER SIBLINGS BYが、ORDER BY唯一のことです。

于 2012-08-24T07:15:55.490 に答える