2014-11-12 2 views
0

동일한 테이블에 대해 두 SQL 쿼리의 결과 집합을 병합하는 동안 문제가 발생합니다. 호출 테이블에 대한 호출 상태 열이 있습니다. 결과 세트가 필요합니다. 여기서 Completed 상태로 20 건의 통화를 가져오고 Call과 같은 테이블에서 연락처의 계획된 상태로 모든 통화를 가져 오려고합니다. 전체 결과 집합에 의해 날짜와 시작 시간으로 정렬됩니다. 다음과 같이하려고합니다.두 SQL 쿼리의 조합으로 한 쿼리에 대한 제한

(SELECT * ' + 
      'FROM calls ' + 
      'WHERE primary_contact=' + id + ' ' + 
      'AND callstatus="Planned")' ; 
      'UNION (SELECT * ' + 
      'FROM calls ' + 
      'WHERE primary_contact=' + id + ' ' + 
      'AND callstatus="Completed"' + 
      'LIMIT 0,20)' + 
      'ORDER BY calldate || " " || stime DESC '; 

이 쿼리는 나를 위해 작동하지 않습니다. 누가 도와 주시겠습니까?

미리 감사드립니다. 이와

+0

작동하지 않습니다 무엇입니까? 오류 메시지가 표시되거나 잘못된 결과가 표시됩니까? 잘못된 결과가 나온다면 어떻게 잘못 되었습니까? 당신이 얻는 것과 얻을 것으로 기대되는 것? – Googie

답변

1

시도 : 정확히

SELECT * 
    FROM calls 
WHERE primary_contact = :id AND 
     callstatus = 'Planned' 
UNION 
SELECT * 
    FROM (
      SELECT * 
      FROM calls 
      WHERE primary_contact = :id AND 
        callstatus = 'Completed' 
      LIMIT 20 
     ) 
ORDER BY calldate, stime; 
+0

+ 'primary_contact = WHERE'+ ID + ''+ 'AND callstatus = "계획"UNION'+ 'SELECT'통화 FROM '+ 'SELECT * FROM (* 선택 '*'+ '통화 FROM' + '어디에서 primary_contact ='+ id + ''+ 'AND callstatus = "완료"+' 'LIMIT 0,10)'+ '주문 번호 calldate || ""|| stime DESC ' – KNA

+0

당신의 도움에 감사드립니다. 그러나 위와 같이 게시 한 것처럼 내부 쿼리를 만들어야했습니다.하지만 지금 직면하고있는 문제는 LIMIT가 완료 된 호출에만 적용되는 대신 전체 결과 집합으로 설정된다는 것입니다. 그것을 괄호로 묶으려고했지만 구문에 문제가 있습니다. – KNA

+0

왜 변경해야합니까? 내 쿼리가 잘못된 결과를 제공 했습니까? 'LIMIT'은 모든'SELECT'에 적용되기 때문에'UNIM'으로 결합 된 것조차도 'LIMIT'에 대한 문제에 직면 해 있습니다. 내 쿼리를 보아라 - 나는 두번째 서브 쿼리에만'LIMIT'을 적용한다 - 그것은 외부'SELECT'에 영향을 미치지 않는다. 이것은 하나의'SELECT'를 내부'SELECT'로 묶어서'LIMIT'을 그 내부 'SELECT'에만 제한시키는 전체적인 요점입니다. – Googie