2017-11-17 1 views
0

2 개의 테이블을 아날로그로 변환하려고합니다.이 2 개의 테이블은 동일하지만 쿼리를 실행할 때 모든 데이터를 가져옵니다. 왜?두 테이블이 같은 경우 데이터가 존재하지 않는 이유는 무엇입니까? (Python, mysql)

connection = MySQLdb.connect(host='localhost', 
    user='adam', 
    passwd='', 
    db='database1', 
    use_unicode=True, 
    charset="utf8") 
cursor = connection.cursor() 
query = """ select `ACTUAL_TIME`, `ACTUAL_DAY`, `EXAMINED_AIRPORT_CODE`, `EXAMINED_AIRPORT_AIRPORT`,  `EXAMINED_AIRPORT_COUNTRY`, `ARRIVALS/DEPARTURES`, `SCHEDULED_TIME`, `FLIGHT`, `FROM`, `AIRLANE`,`AIRCRAFT`, `STATUS`, `FLIGHT_ID_1`, `FLIGHT_ID_2`, `UPLOAD_TIME` 
from OSSZES as a 
where not exists(select `ACTUAL_TIME`, `ACTUAL_DAY`,`EXAMINED_AIRPORT_CODE`, `EXAMINED_AIRPORT_AIRPORT`, `EXAMINED_AIRPORT_COUNTRY`, `ARRIVALS/DEPARTURES`, `SCHEDULED_TIME`, `FLIGHT`, `FROM`, `AIRLANE`,`AIRCRAFT`, `STATUS`, `FLIGHT_ID_1`, `FLIGHT_ID_2`, `UPLOAD_TIME` 
from OSSZES_CLEAR as b 
where `a`.`ACTUAL_DAY` = `b`.`ACTUAL_DAY` AND `a`.`EXAMINED_AIRPORT_CODE` = `b`.`EXAMINED_AIRPORT_CODE` AND `a`.`FLIGHT` = `b`.`FLIGHT` AND `a`.`SCHEDULED_TIME` = `b`.`SCHEDULED_TIME` AND `a`.`STATUS` = `b`.`STATUS`) 
    into outfile '/tmp/proba.csv' 
    fields terminated by ';' 
    enclosed by '"' 
    lines terminated by '\n'; 
    """ 
cursor.execute(query) 
connection.commit() 
cursor.close() 

답변

0

당신이하려는 일이 조금 분명하지 않습니다. 테이블에서 모든 레코드를 원한다고 가정하면 테이블 b의 해당 레코드가없고 하위 쿼리의 논리가 올바른 조인을 정의합니다. 다음은이 작업을 수행하는 방법입니다.

select 
     `ACTUAL_TIME`, 
     `ACTUAL_DAY`, 
     `EXAMINED_AIRPORT_CODE`, 
     `EXAMINED_AIRPORT_AIRPORT`,  
     `EXAMINED_AIRPORT_COUNTRY`, 
     `ARRIVALS/DEPARTURES`, 
     `SCHEDULED_TIME`, 
     `FLIGHT`, 
     `FROM`, 
     `AIRLANE`, 
     `AIRCRAFT`, 
     `STATUS`, 
     `FLIGHT_ID_1`, 
     `FLIGHT_ID_2`, 
     `UPLOAD_TIME` 
    from OSSZES as a 
    left join (
     select 
     `ACTUAL_TIME` 
     `ACTUAL_DAY`, 
     COALESCE(`EXAMINED_AIRPORT_CODE`, '') as EXAMINED_AIRPORT_CODE -- edit 
     `EXAMINED_AIRPORT_AIRPORT`, 
     `EXAMINED_AIRPORT_COUNTRY`, 
     `ARRIVALS/DEPARTURES`, 
     `SCHEDULED_TIME`, 
     `FLIGHT`, 
     `FROM`, 
     `AIRLANE`, 
     `AIRCRAFT`, 
     `STATUS`, 
     `FLIGHT_ID_1`, 
     `FLIGHT_ID_2`, 
     `UPLOAD_TIME` 
     from OSSZES_CLEAR 
    ) as b using (`ACTUAL_DAY`,`EXAMINED_AIRPORT_CODE`,`FLIGHT`,`SCHEDULED_TIME`,`STATUS`) 
    where b.EXAMINED_AIRPORT_CODE is null 
    into outfile '/tmp/proba.csv' 
    fields terminated by ';' 
    enclosed by '"' 
    lines terminated by '\n'; 

그래도 문제가 해결되지 않으면 어떤 결과를 얻었는지와 예상 결과를 분명히하십시오.

+0

다음 오류 메시지가 나타납니다. mysql_exceptions.OperationalError : (1054, 'from 절'의 'EXAMINED_AIRPORT_CODE'을 알 수 없음) – Harley

+0

알 수있는 한, 제공된 코드의 내용입니다. 테이블 구조에 대한 정보를 제공 할 수 있습니까? –

+0

하지만 게시 한 것은 효과가 있습니다. 코드에서이 오류 메시지를 표시합니다. – Harley

관련 문제