2014-09-22 47 views
0

我寫下了下面的代碼。我知道這是錯誤的,但我不知道如何做同樣的事情。我會感謝任何幫助。用if創建一個Mybatis查詢

<select id="getSeqTempByRulesCabN3" resultType="java.lang.Integer" > 
    select templat.seq_temp 
    from re_t_vp_voucher_template templat, re_t_vp_voucher_rules rules_t, re_t_vp_voucher_rules_pais pais 
    where templat.seq_temp = rules_t.seq_temp 
       and rules_t.SEQ_RULE = PAIS.SEQ_RULE 
    <if test="(select count(*) as cuenta 
     from re_t_vp_voucher_template templat, re_t_vp_voucher_rules rules_t, re_t_vp_voucher_rules_pais pais 
     where templat.seq_temp = rules_t.seq_temp 
       and rules_t.SEQ_RULE = PAIS.SEQ_RULE 
       AND rules_t.seq_rec is not null 
       and rules_t.seq_rec = #{seqRec, jdbcType=DECIMAL} 
     group by templat.seq_temp, rules_t.fec_desde_res, rules_t.cod_idioma) != 0"> 
       and rules_t.seq_rec = #{seqRec, jdbcType=DECIMAL} 
    </if> 
       and rules_t.seq_ttoo = #{seqTtoo, jdbcType=DECIMAL} 
    group by templat.seq_temp, rules_t.fec_desde_res, rules_t.cod_idioma 
</select> 
+0

您可以添加錯誤日誌在這裏呢?另外,從沒有向select標籤傳入任何參數,從哪裏獲取值#{seqRec}和#{seqTtoo}? – Akhil 2014-09-23 19:57:51

回答

0

好的。我已經知道它爲什麼不起作用。你不能簡單地在測試標籤裏寫一個完整的sql select查詢。測試標籤只接受參數。實際上,我將select的響應作爲參數傳遞。

+0

我用填寫了mybatis代碼。 – elvenbyte 2014-09-25 13:07:47

0

我有一個可怕的解決。如果你的查詢工作得足夠快,也許這可以工作。

你的條件是if a!=0 then b,它可以表示爲((a!=0 AND b) OR (a=0))

因此,我的報價是:

SELECT templat.seq_temp 
FROM re_t_vp_voucher_template templat, 
    re_t_vp_voucher_rules rules_t, 
    re_t_vp_voucher_rules_pais pais 
WHERE templat.seq_temp = rules_t.seq_temp 
    AND rules_t.SEQ_RULE = PAIS.SEQ_RULE 
    AND rules_t.seq_ttoo = #{seqTtoo, jdbcType=DECIMAL} 
    AND ((rules_t.seq_rec = #{seqRec, jdbcType=DECIMAL} 
     AND 
      (SELECT count(*) AS cuenta 
      FROM re_t_vp_voucher_template templat, 
       re_t_vp_voucher_rules rules_t, 
       re_t_vp_voucher_rules_pais pais 
      WHERE templat.seq_temp = rules_t.seq_temp 
      AND rules_t.SEQ_RULE = PAIS.SEQ_RULE 
      AND rules_t.seq_rec IS NOT NULL 
      AND rules_t.seq_rec = #{seqRec, jdbcType=DECIMAL} 
      GROUP BY templat.seq_temp, 
        rules_t.fec_desde_res, 
        rules_t.cod_idioma) != 0) 
     OR 
     (SELECT count(*) AS cuenta 
      FROM re_t_vp_voucher_template templat, 
       re_t_vp_voucher_rules rules_t, 
       re_t_vp_voucher_rules_pais pais 
      WHERE templat.seq_temp = rules_t.seq_temp 
      AND rules_t.SEQ_RULE = PAIS.SEQ_RULE 
      AND rules_t.seq_rec IS NOT NULL 
      AND rules_t.seq_rec = #{seqRec, jdbcType=DECIMAL} 
      GROUP BY templat.seq_temp, 
        rules_t.fec_desde_res, 
        rules_t.cod_idioma) = 0) 
GROUP BY templat.seq_temp, 
     rules_t.fec_desde_res, 
     rules_t.cod_idioma 
+0

謝謝,但我有太多的查詢來這樣做。 – elvenbyte 2014-09-25 13:07:11