2009-06-17 5 views
1

나는 우리에게 설정을 바꾸어 놓은 기록이있는 공유 호스팅 환경에서 사이트에 대해 약간의 작업을하고 있습니다. 이번 주에 업데이트 스크립트가 갑자기 작동을 멈추었습니다. 근본적인 이유는 결과를 반환하는 데 사용 된 NOT IN 절이 더 이상 그렇게하지 않는다는 것입니다.MySQL "In IN"쿼리가 갑자기 결과를 반환하지 않습니다.

쿼리는 그 본질이있다 :

SELECT * 
FROM db1.entry 
where entry_id not in 
(
    select entry_id from db2.content 
) 

내가 직접 두 테이블을 검사하여 반환해야 기록이 실제로 있다는 것을 확인할 수 있습니다. 두 개의 쿼리 아래를 실행하는 경우, 첫 번째 두 번째는하지 않는 것을 entry_ids 반환

SELECT * 
FROM db1.entry 
order by entry_id desc 

SELECT * 
FROM db2.content 
order by entry_id desc 

하고 다시 반복 처리를,이 모두가 몇 달 동안 제대로 작동했다. 코드를 변경하지 않았지만 MySQL 설정이 변경되었을 수도 있습니다. PHP 환경에서 무언가가 변경되었을 수도 있지만 실제 사이트에서 실행될 때와 마찬가지로 phpMyAdmin에서 실행될 때 문제의 쿼리가 동일한 방식으로 실패하기 때문에 가능성이 적습니다.

그리고 물론, 그것은 여전히 ​​내 devbox에 완벽하게 작동합니다.

라이브 사이트에서 MySQL 버전 4.1.11을 실행 중입니다. 내 질문은, 그 사람이 쿼리가 작동하는 방식을 바꿀 것이라고 그 버전에 대한 MySQL 설정을 아는 사람 있습니까?

감사합니다.

답변

5

내부 쿼리가 NULL의 결과를 반환하지 않는지 확인하십시오. documentation에서

:

SQL 표준을 준수하기 위해, IN 반환 NULL뿐만 아니라 왼쪽에있는 표현은 NULL뿐만 아니라 일치하는 항목이 목록에서 발견되지 않는 경우 중 하나 인 경우 목록의 표현식은 NULL입니다.

+0

대신에 존재하며, 그것은 도움이되지 않았다 . 나는 당신의 코멘트에 답한 후에 NOT NOT NULL을 포함하도록 내 질문을 업데이트하고 실제로 다시 시도했다. 구조에 "보스 효과"가있는 것 같습니다. 당신이 보스에게 보여주기 전까지는 아무 것도 없습니다. 깨진 것들은 당신이 인터넷에서 그들에 대해 물어 보면 사소한 문제를 해결합니다. 감사합니다. –

+0

@Jason : 다음에 인터넷을 통해 상사에게 보여주고 왜 작동하지 않는지 묻습니다. 이렇게하면 효과가 서로 상쇄됩니다. – Quassnoi

1

당신은 아마 entry_id 가입 왼쪽을 사용하기위한 적어도 하나의 행에 NULL 값이 없거나 실제로 널 (null)이 하위 쿼리에서 체크와 쿼리를 테스트했다

관련 문제