2013-12-10 2 views
0

두 개의 시간대에있는 여러 사이트의 이벤트가 포함 된 데이터베이스가 있으며 모두 현지 시간을보고합니다. 지난 12 시간 동안의 데이터를 가져와 CSV로 저장해야합니다. 내가 노조에 넣고 ORDER BY없이 데이터를 출력하는 동안 INTO OUTFILE 섹션을 사용하여 실행할 때 별칭 오류가 발생합니다. 내가 뭘 놓치고 있니? 테이블동일한 데이터 집합에서 두 개의 시간 기반 쿼리를 결합하십시오.

(SELECT 
    comp.locationid, 
    comp.name, 
    event.status, 
    event.starttime, 
    event.endtime 
FROM 
    comp,event 
WHERE 
    event.endtime >= DATE_SUB(NOW(), INTERVAL 12 HOUR) 
    AND event.endtime < NOW() 
    AND event.compid = comp.id 
    AND comp.timezone = "EST") 


UNION 


(SELECT 
    comp.locationid, 
    comp.name, 
    event.status, 
    event.starttime, 
    event.endtime 
FROM 
    comp,event 
WHERE 
    event.endtime >= DATE_SUB(NOW(), INTERVAL 15 HOUR) 
    AND event.endtime < DATE_SUB(NOW(), INTERVAL 3 HOUR) 
    AND event.compid = comp.id 
    AND comp.timezone = "PST") 


ORDER BY comp.locationid 
INTO OUTFILE 
    "report.csv" 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n' 
; 
+0

주고 별칭을 모든 따옴표를 모두 SELECT의 괄호를 제거합니다. –

+0

SQL을 처음 사용하기 때문에 문서가 혼란 스럽습니다. 어떻게 테이블의 별명을 지정합니까? – Reldaw

답변

0

업데이트 도움이 될 것이다 :

  1. 당신은 UNIONORDER BY 절에서 특정 테이블 이름을 참조 할 수 없습니다. 그건 그냥

    단순히

    ORDER BY locationid 
    
  2. 당신이 가장 가능성이 대신 UNIONUNION ALL을 사용하는 의미 것으로 보인다 외에

    ORDER BY comp.locationid 
         ^^^^^ 
    

    을 변경했다되고. 따라서 UNION은 중복을 제거하기 위해 별도의 처리 단계가 필요하기 때문에이를 변경하십시오.

  3. 각 테이블에 작은 따옴표에 UNION

  4. 변경에

+0

'UNION ALL' 그리고 참조의 변경은 트릭을하지만 지금은'INTO OUTFILE'에서 일반적인 오류가 발생합니다 – Reldaw

+0

모든 큰 따옴표를 작은 따옴표로 바꾸고 ** 정확한 ** 오류 메시지를 게시하십시오 다시 얻는 – peterm

+0

라인 2에서 1064 (42000) 오류 : SQL 구문에 오류가 있습니다. 'INTO OUTFILE '근처에서 사용할 수 있도록 MySQL 서버 버전에 해당하는 ma nual을 확인하십시오. report.csv ' FIELDS TERMINATED BY', ' LINES TERMINA'35 행 – Reldaw

0

주기 별명은

(SELECT 
    comp.locationid, 
    comp.name, 
    event.status, 
    event.starttime, 
    event.endtime 
FROM 
    comp,event 
WHERE 
    event.endtime >= DATE_SUB(NOW(), INTERVAL 12 HOUR) 
    AND event.endtime < NOW() 
    AND event.compid = comp.id 
    AND comp.timezone = "EST") AS T 


UNION ALL 


(SELECT 
    comp.locationid, 
    comp.name, 
    event.status, 
    event.starttime, 
    event.endtime 
FROM 
    comp,event 
WHERE 
    event.endtime >= DATE_SUB(NOW(), INTERVAL 15 HOUR) 
    AND event.endtime < DATE_SUB(NOW(), INTERVAL 3 HOUR) 
    AND event.compid = comp.id 
    AND comp.timezone = "PST") AS T2 
ORDER BY comp.locationid 
INTO OUTFILE 
    "report.csv" 
FIELDS TERMINATED BY ',' 
LINES TERMINATED BY '\r\n' 
; 
관련 문제