2010-11-25 8 views
0

残念ながら、私はDjangoにとってはかなり初心者です。だから、私は2つのテーブルを結合する簡単なクエリについては問題があります。私は1つのリレーションに1を持つ2つの表の呼び出し「TABLE1」と「表2」を持っていると仮定すると: TABLE1(FIELDA、FIELDB、FIELDC) 表2(FIELDA、FIELDC、fieldZは)私はDjangoの簡単な結合技術についてお聞きしたいと思います

私は、クエリの結果を取得したいですlike

SELECT T1.fieldA,fieldB,fieldC,fieldZ FROM table1 as T1, table2 as T2 WHERE T1.fieldA=T2.fieldA 

どうすればDjangoでこれを行うことができますか?

ありがとうございます。

+2

を指定していますか? – mipadi

+0

ええ、純粋にDBテーブルではなく、モデルとDjangoのORMの観点から考え始める必要があります。ORM –

+1

s/more/anything/ –

答えて

0

テストされていない列車に早期通勤ボーッで書かれたコード、が、これは動作するはずです:

results = Table1Model.objects.filter(fieldA__in = Table2Model.objects.all().values_list('fieldA',flat=True)) 

これはあなたに関連するTable1ModelObjectsのクエリセットを取得します。

.values_list('fieldA','fieldB','fieldC','fieldZ', flat=True) 

または、代わりにすべてのことを、あなたが戻って生のSQLに落ちることができます覚えている:

あなたを与えるだろう
results = Table1Model.objects.raw("SELECT T1.fieldA,fieldB,fieldC,fieldZ 
            FROM table1 as T1, table2 as T2 
            WHERE T1.fieldA=T2.fieldA") 

をあなただけの値が必要な場合は、上記の、最終ブレースの後にこれを追加バックオブジェクトも(あなたがDjango 1.2を使用していると仮定して)。あなただけの値を望んでいた場合、あなたはextra()を使用して、暗黙的に参加できることを上からvalues_listビットを追加したり、queryset reference

0

内の余分な()を見て:どのようにあなたのモデルが

Table1Model.objects.extra(
    tables=['table2'], 
    where=['table1.fieldA = table2.fieldA'] 
) 
+0

ありがとうございます。私はこの仕事が今どのようにそれを理解する..多くのおかげで再び.. :) – Fon

関連する問題