2012-01-26 18 views
0

を立ち往生していますが、私は、このようなSQLクエリを持って考えてみます。私はそれがSQLでどのように見えるかを知っているが、私はHQLでそれを必要と

SELECT t1.* FROM table1 t1 LEFT JOIN table2 t2 ON t1.table2_id = t2.id 
WHERE t2.value = 'something' OR t1.value = 'something'; 

私はHQLクエリーで行われ、同じことをする必要があります。 詳細情報:私はクラス表1表2があると、両方のフィールドクラス表2table2のを持つフィールドの名前表1を持ちます。私が欲しいのは、特定のを持っているか、それがメンバーtable2のが一定を持っており、私はtable2のフィールドがヌルであるかもしれないことを知っているのです表1オブジェクトのリストを取得することです。

私は成功することなくそれをしようとするたびに説明することなく、できる限り明確に質問を策定しようとしました。申し訳ありませんが、それは非常に明確ではない場合。

+0

あなたのクエリは奇妙に見えますが、あなたはテーブルに参加していません。私はこれを除外します:SELECT * FROM table1 t1 left join table2 t2 on t1.table2_id = t2.id ここで(t2.value = 'something' OR t1.value = 'something') –

+0

@ t-clausen.dkこれは暗黙的な結合です(http://en.wikipedia.org/wiki/Join_(SQL)#Inner_joinを参照)。 – Borealid

+0

@Borealid ok、table1 value = 'something'の場合に返される行の数を教えてください。答え:これは、テーブル2に存在する行数だけ返します。 –

答えて

0

の作業例:

select t1 from Table1 as t1 left outer join t1.table2 as t2 
where t1.value = :value or t2.value = :value 

追加注記: を1がfindAllのようのexecuteQueryメソッドを使用しなければならないのGrailsを使用している場合で十分ではありません。

わからない他の解決策があるかもしれません。あなたがより良い解決策を共有したいのであれば、してください。

0

質問の問題の説明に基づいて、あなたは親クラスTable1と子クラスTable2を持っていると仮定します。 Table1には、Table2型のメンバーtable2があります。この場合、私は信じて、適切なHQLは次のようになります。

from Table1 t1 where t1.value = 'something' or t1.table2.value = 'something' 
+1

クラスは親子関係にありません。 Table1にはTable2クラスのメンバしかありません。つまり、_Table1_クラスに_Long id、String value、Table2 table2_の各フィールドが含まれています。あなたの提案されたクエリはこれに似たSQLを生成します: 'select t1。* from table1 t1、\t table2 t2ここで\t t1.table2_id = t2.idと(t2.value =?またはt1.value =?)' table2_idがnullのtable1行を戻します。 – Aidas

+0

@Aidas:いいキャッチ!左側の外部結合を使用する必要があります。しかし、私はあなたがすでにそれを理解していることが分かります:Table1からt1 left outer join t1.table2 t2ここで、t1.value = 'something'またはt2.value = 'something'。 – Olaf

関連する問題