我在数据库中有一个表,其中包含3个外键到另一个表(这三个表的名称是:manager,worker和employee)。在每一行中只填充一个外键。我需要编写一个查询,注意在执行子句指定条件的地方填充fk的哪一列。 我在jpa中编写简单查询但无法正常工作
select b
from allEmployees b
where b.manager.name= :name
OR b.worker.name = :name
OR b.employee.name= :name
你有什么想法吗?我必须解决它,但我不知道
答案 0 :(得分:1)
听起来你可以使用嵌套解码,例如如果列名是a,b和c,则查询将是;
select decode(a,null,decode(b,null,decode(c,null,'None','Key3'),'Key2'),'Key1') as result from table
例如,如果您的表格如下所示:
A | B | C
----------
x | |
| x |
| | x
| |
然后查询将返回:Key1,Key2,Key3,None为4行。
答案 1 :(得分:0)
您的原始查询必须正常工作,数据中的某些内容可能是问题所在。假设表列是String,您可以尝试:
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)
另一种方法是使用集合操作:
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)
另一方面,这可能是一个设计错误,想想如果经理和员工的名字相同会发生什么,你也必须检查规范化,最好是用主键代替名字。< / p>
HTH