HQL - LEFT JOIN 上的 COALESCE 或 CASE
HQL - COALESCE or CASE on LEFT JOIN
我有 4 个 tables:
job
client
order
client
client
state
state
name
我需要从 工作 或 订单 中获取客户的州名称。如果工作是 not null 从工作中获取,否则从订单中获取。
我试过这样的事情:
LEFT JOIN job.client jc
LEFT JOIN order.client oc
LEFT JOIN COALESCE(jc.state, oc.state) clientState
但我得到一个 意外标记:COALESCE 异常。
我也试过:
LEFT JOIN job.client jc
LEFT JOIN order.client oc
LEFT JOIN CASE WHEN job IS NOT NULL THEN jc.state ELSE oc.state END clientState
但我得到一个 意外标记:CASE 异常。
知道如何解决这个问题吗?我是否应该使用状态 table(jc.state 和 oc.state)尝试多个 JOINS 并在投影中使用 CASE?有没有更简单的方法?
提前致谢
额外信息:
这个查询可以像下面的例子一样解决。我的主要问题是是否有更好的方法:
SELECT CASE WHEN jcClientState IS NOT NULL THEN jcClientState.code ELSE ocClientState.code END
FROM job job
LEFT JOIN anotherTable anotherTable
LEFT JOIN job.client jc
LEFT JOIN anotherTable.order oc
LEFT JOIN jc.state jcClientState
LEFT JOIN oc.state ocClientState
假设 HQL 支持 coalesce(在快速搜索时显示为这样),那么您可以像这样使用 coalesce:
select coalesce(table1.state, table2.state, 'unknown') as state
from table1
left join table 2
on table2.id = table1.id
合并将获取第一个非空值。
我有 4 个 tables:
job |
---|
client |
order |
---|
client |
client |
---|
state |
state |
---|
name |
我需要从 工作 或 订单 中获取客户的州名称。如果工作是 not null 从工作中获取,否则从订单中获取。
我试过这样的事情:
LEFT JOIN job.client jc
LEFT JOIN order.client oc
LEFT JOIN COALESCE(jc.state, oc.state) clientState
但我得到一个 意外标记:COALESCE 异常。
我也试过:
LEFT JOIN job.client jc
LEFT JOIN order.client oc
LEFT JOIN CASE WHEN job IS NOT NULL THEN jc.state ELSE oc.state END clientState
但我得到一个 意外标记:CASE 异常。
知道如何解决这个问题吗?我是否应该使用状态 table(jc.state 和 oc.state)尝试多个 JOINS 并在投影中使用 CASE?有没有更简单的方法?
提前致谢
额外信息:
这个查询可以像下面的例子一样解决。我的主要问题是是否有更好的方法:
SELECT CASE WHEN jcClientState IS NOT NULL THEN jcClientState.code ELSE ocClientState.code END
FROM job job
LEFT JOIN anotherTable anotherTable
LEFT JOIN job.client jc
LEFT JOIN anotherTable.order oc
LEFT JOIN jc.state jcClientState
LEFT JOIN oc.state ocClientState
假设 HQL 支持 coalesce(在快速搜索时显示为这样),那么您可以像这样使用 coalesce:
select coalesce(table1.state, table2.state, 'unknown') as state
from table1
left join table 2
on table2.id = table1.id
合并将获取第一个非空值。