2014-01-09 6 views
7

postgresqlの大きなテーブルを1行のテーブルに結合しようとしています。はい、私はちょうどこの単一の行のテーブルから値を取得し、私のクエリに書かれたことがわかりますが、そこには210の列があります。1 = 1とクロス結合の結合

私の質問はこれです.1つの行テーブルをクロスジョインを使用して結合するか、トートロジー(1 = 1など)で通常の結合を使用する必要があります。これらの方法のいずれかが遅くなることに縛られていますか?

また、3番目に速い方法がありますか?

+1

問題はなんですか?参加条件には210列すべてが必要ですか? –

+9

あなたの意思を明確にするために 'cross join'を使います。それ以外の場合は、来年あなた(またはあなたのコードを変更しなければならない人)は、その愚かな '1 = 1'が意味すると思われるものが不思議に思うでしょう。 –

+2

ソリューションを求める際のパフォーマンスを測定します。 –

答えて

4

理由は1=1が存在する理由は、文字列を連結することによって動的SQL文を簡単に作成できるようにすることです(パラメタライゼーションなどの通常の保障措置)。その中1=1と句は最初の節、およびSQLエンジンは一般1=1を最適化するの存在を確認することなく、SQLに追加される追加WHERE条件を可能にするので、何ら性能はありませんWHERE事前定義されたを有する

差。

他の文脈では、1=1は一般に無害ですが、特に有用ではありません。

3

注意すべきことは、テーブルの1つが空の場合、クロスジョインは空のテーブルになります。テーブルの1つが空でレコードが必要な場合は、1 = 1に外部結合(たとえば、左、右、または完全)が必要な場合があります。

関連する問題