2013-03-20 53 views
1

我試圖將此SQL轉換爲HQL,但我發現沒有辦法做左連接。將此SQL轉換爲HQL? (左加入值而不是列)

SELECT 
    mdcs_causa.id_causa, 
    usuarios.ds_usuario, 
    usuarios.setor, 
    empresas.ds_empresa, 
    itens_controle.id_item_controle, 
    itens_controle.ds_item, 
    itens_controle.ds_indicador, 
    itens_controle.ds_cliente, 
    itens_controle.desdobramento, 
    itens_controle.auxiliar, 
    itens_controle.bmk_nome, 
    itens_controle.bmk_vlr, 
    m.status, 
    m.medido, 
    m.medicao, 
    m.fca, 
    m.am_cronico, 
    m.ac_cronico, 
    m.ap_cronico, 
    m.id_medicoes as idmedicao, 
    itens_controle.prioridade 
FROM 
    mdcs 
    INNER JOIN mdcs_causa 
     ON mdcs.id_mdc = mdcs_causa.id_mdc 
    INNER JOIN itens_controle 
     ON mdcs_causa.Id_Item_Controle = itens_controle.id_item_controle 
    INNER JOIN usuarios 
     ON usuarios.id_usuario = itens_controle.id_usuario 
    INNER JOIN empresas 
     ON empresas.id_empresa = usuarios.id_cliente_tabela 
    LEFT JOIN medicoes m 
     ON (
      itens_controle.id_item_controle = m.id_item_controle 
      and 
      m.nm_ano = 2013 
      and 
      m.nm_periodo = 2 
      and 
      mdcs_causa.id_mdc = mdcs.id_mdc 
     ) 
    WHERE 
     mdcs.id_mdc = 5077 

我想我可以把nm_anonm_periodo條件在where子句中,有或m.id_item_controle is null但這種OR條件似乎並沒有工作,即使是在SQL。

另一種方法是左連接子查詢。這在SQL中起作用,但我認爲HQL不支持這一點。

回答

2

它可與with關鍵字來完成:

... 
left join itens_controle.medicoes m with (m.nm_ano = 2013 and m.nm_periodo = 2 and mdcs_causa.id_mdc = mdcs.id_mdc) 
where mdcs.id_mdc = 5077 

而是明確的值,你應該提供給他們作爲參數。

+0

這看起來像。我會盡快解決一些與我的服務器有關的問題。 – 2013-03-20 15:24:28

0

Read this in this pdf left join is used 如下:

Query getEBills =session.createQuery(session.createQuery(from " EBill ebill EBill 
ebill 
left join ebill.accountTransaction where 
ebill.balance > 500"; 
Li li f l bi i li() ist listOfRowValues = getDebitTransactions.list(); 
for (Object[] singleRowValues : listOfRowValues) { 
// pull off the EBill // pull off the EBill 
EBill ebill = (EBill)singleRowValues[0]; 

我沒有在任何HQL的經驗,我已經貼了什麼我已經找到了你。希望這會以任何方式幫助你。