2015-07-19 27 views
0

我需要MySQL的幫助,因爲我是新手。嵌套where子句我mysql給sql grammmar異常

基本上對於一個選定的日期範圍,我需要在一個名爲UniwareReport的表中存在跟蹤號的記錄數,不存在於MisReport

以下是我的嘗試,但我知道這是不對的。

select count (*) from UniwareReport 
    where invoiceCreated >=:sDate 
    and invoiceCreated <=:eDate 
    and TrackingNumber NOT IN(select airwayBill from MisReport) 


@Override 
public Long getUniwareReportsCountInDateRange(String param) throws ParseException { 
    String sDate = param; 
    String eDate = param; 
    //String oId = saleOrderNumber.trim(); 
    Query query; 
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 
    if (param.contains("-")) { 
     String date[] = param.split("-"); 
     sDate = date[0]; 
     eDate = date[1]; 
    } 
     query = sessionFactory.getCurrentSession().createQuery(
       "select count (*) from UniwareReport where invoiceCreated>=:sDate and invoiceCreated <=:eDate and (SELECT trackingNumber from UniwareReport where trackingNumber NOT IN(select airwayBill from MisReport))"); 
     Date startDate = DateUtils.addToDate(dateFormat.parse(sDate), Calendar.DATE, 0); 
     Date endDate = DateUtils.addToDate(dateFormat.parse(eDate), Calendar.DATE, 1); 
     query.setParameter("sDate", startDate); 
     query.setParameter("eDate", endDate); 
     //query.setParameter("oId", oId); 
     return (Long) query.uniqueResult(); 

} 
+0

請包括包含此SQL查詢的代碼。 – Eran

+0

併發布錯誤消息的所有詳細信息。 – Glorfindel

+0

:0:0:意外的AST節點:查詢..這是錯誤 –

回答

0

您不需要在子查詢中使用來自UniwareReport的另一個SELECT。這應該工作:

select count (*) from UniwareReport 
    where invoiceCreated >= :sDate 
    and invoiceCreated <= :eDate 
    and TrackingNumber NOT IN (select airwayBill from MisReport)