0

別のテーブルへの 3 つの外部キーを含むデータベースに 1 つのテーブルがあります (この 3 つのテーブル名は、マネージャー、ワーカー、および従業員です)。各行には、1 つの外部キーのみが入力されます。句指定の条件が実行される場所で、fk のどの列が入力されるかに注意して、1 つのクエリを記述する必要があります。jpaで簡単なクエリを書いているのですが、うまくいきません

 select b 
 from allEmployees b 
 where b.manager.name= :name 
    OR b.worker.name = :name 
   OR b.employee.name= :name 

何か考えがありますか?私はそれを解決しなければなりませんが、私には考えがありません

4

2 に答える 2

0

元のクエリは正常に動作する必要があります。データの何かが問題になる可能性があります。テーブルの列が文字列であると仮定すると、次を試すことができます。

select b 
  from allEmployees b 
  where upper(b.manager.name) = upper(:name) 
  OR upper(b.worker.name) = upper(:name) 
  OR upper(b.employee.name) = upper(:name) 

もう 1 つの方法は、集合操作を使用することです。

select b 
  from allEmployees b 
  where upper(b.manager.name) = upper(:name) 
UNION
select b 
  from allEmployees b 
  where upper(b.worker.name) = upper(:name) 
UNION
select b 
  from allEmployees b 
  where upper(b.employee.name) = upper(:name) 

一方、これは設計エラーである可能性があります。マネージャーと従業員の名前が同じ場合はどうなるかを考えてください。また、正規化を確認する必要があります。名前の代わりに主キーの ID を使用することをお勧めします。

HTH

于 2013-06-25T18:18:22.267 に答える