我有4張桌子:
| 作業 |
|---|
| 客戶 |
| 命令 |
|---|
| 客戶 |
| 客戶 |
|---|
| 狀態 |
| 狀態 |
|---|
| 姓名 |
我需要從作業或訂單中獲取客戶的州名。如果作業不為空,則從作業中獲取,否則從訂單中獲取。
我試過這樣的事情:
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例外。
關于如何解決這個問題的任何想法?我應該使用狀態表(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
uj5u.com熱心網友回復:
假設 HQL 支持合并(在進行快速搜索時出現),那么您可以像這樣使用合并:
select coalesce(table1.state, table2.state, 'unknown') as state
from table1
left join table 2
on table2.id = table1.id
合并將獲取第一個非空值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/329692.html
