私の構文は明らかに3つの場合すべて正しいですが(PostgreSQLは何も言及していませんが)、これらの3つのクエリすべてで同じ結果が返されます。見知らぬ人でも、次のいずれかからDESCを追加/削除しても影響はありません。サブクエリの要素に基づいて結果をソートすることは可能ですか?サブクエリとソート? (ORDER BY)
Sort by affiliation
SELECT * FROM articles_view WHERE (1=1)
AND spubid IN
(SELECT people.spubid FROM people WHERE (people.slast ilike 'doe')
GROUP BY people.spubid, people.slast, people.saffil)
AND spubid IN
(SELECT status.spubid FROM status WHERE ((status.imonth >= 01 OR status.imonth IS NULL) AND status.iyear >= 2000) AND ((status.imonth <= 01 OR status.imonth IS NULL) AND status.iyear <= 2008) ORDER BY status.iyear, status.imonth)
Sort by last name, descending order
SELECT * FROM articles_view WHERE (1=1)
AND spubid IN
(SELECT people.spubid FROM people WHERE (people.slast ilike 'doe')
GROUP BY people.spubid, people.slast, people.saffil ORDER BY people.slast DESC)
AND spubid IN
(SELECT status.spubid FROM status WHERE ((status.imonth >= 01 OR status.imonth IS NULL) AND status.iyear >= 2000) AND ((status.imonth <= 01 OR status.imonth IS NULL) AND status.iyear <= 2008))
Sort by year/month descending order
SELECT * FROM articles_view WHERE (1=1)
AND spubid IN
(SELECT people.spubid FROM people WHERE (people.slast ilike 'doe')
GROUP BY people.spubid, people.slast, people.saffil)
AND spubid IN
(SELECT status.spubid FROM status WHERE ((status.imonth >= 01 OR status.imonth IS NULL) AND status.iyear >= 2000) AND ((status.imonth <= 01 OR status.imonth IS NULL) AND status.iyear <= 2008) ORDER BY status.iyear, status.imonth DESC)
なぜORDER BY条件が結果の順序に影響しないのか分かりません。
********* UPDATE:私は私のすべてのソートを行うには(この場合はarticles_viewに)私の見解では、アレイの列を使用していたやってしまった何を
。そのようにして、私はすべての種類をプライマリクエリの「列」で行い、JOINSを使用する必要はありません。ビューが定義されている方法では、people/statusテーブル内の特定のpubid(プライマリキー)に一致するすべてのカラム(どちらも1 - > many)がビューの配列カラムに格納されます。私はいつも、主である配列の最初のメンバー(Postgresの中で最初のインデックスではなく、通常0以上1である)ことを知っているので、これは働く理由がある
SELECT * FROM articles_view WHERE
((articles_view.skeywords_auto ilike '%ice%') OR (articles_view.skeywords_manual ilike '%ice%'))
ORDER BY (articles_view.authors[1]).slast
:ソートと私のクエリは次のようになります私がソートするために必要な著者(または主要なステータス)。
私が恐れていたことですが、実際にはジョインを使用しないようにしたい(プロダクトが大きくなりすぎるため、代わりにサブクエリを使用する)。 –
内部結合を使用すると、適切な結果のみが得られ、クエリオプティマイザは、結合が適用される前にwhere句を満たしていないものを取り除くプランを決定する必要があります。 –