2011-10-26 2 views
0

내가 SQL 코드를 다음과 같은 몇몇 다른 명령() EXISTS 하지만 작동하지 않습니다.뿐만 아니라 작동하지 않습니다. ads<>'0', ads<>('0'), m.ads<>0SQL : 사용은

왜 작동하지 않는 걸까요?

"작동하지 않는다"라는 말은 'ads <> 0'줄을 추가 할 때 쿼리 결과에 변화가 없음을 의미합니다 (이 줄을 입력하지 않은 것처럼). 대신 'ads = 0'행을 추가하면 값이 0 인 필드 (실제 존재하는 필드)가없는 것처럼 빈 결과가 출력됩니다.

+1

"작동하지 않음"을 정의하십시오. 오류 메시지가 나타 납니까? – Phil

+4

그러면 쿼리 나 데이터가 잘못되었으므로 질문에서 'EXISTS'를 완전히 제거 할 수 있습니다. 'ads <> 0' 조건으로 시도 했습니까? 최소한의 테스트 케이스로 좁히는 것이 중요한 디버깅 기술입니다. –

+0

'ads == 0' ** 및'posts '에 ** 일치하는 레코드가없는 것 같습니다. – Phil

답변

1

절은 원하는대로 WHERE 성명서로 보내주십시오. members.ads 가정

당신이 가리 켰을 때,

SELECT m.email 
FROM members m 
WHERE m.ads <> 0 
AND EXISTS (
    SELECT 1 
    FROM posts p 
    WHERE p.email = m.email 
) 
ORDER BY m.ads DESC 
0

당신은 사용할 수 있어야 존재 ... 정수 데이터 유형입니다. 조인으로 당신은 또한 물론, 그것을 쓸 수 있습니다 :

SELECT DISTINCT m.email 
    FROM members AS m 
    JOIN posts AS p ON p.email = m.email 
WHERE (m.ads<>0) 
ORDER BY ads DESC 

을 다른 방법으로, 'DISTINCT'동작을 아래로 밀어 하위 쿼리를 사용하기로 결정 있습니다

SELECT m.email 
    FROM members AS m 
    JOIN (SELECT DISTINCT p.email FROM posts AS p) AS q ON q.email = m.email 
WHERE (m.ads<>0) 
ORDER BY ads DESC 

에있을 수 있습니다 회원 테이블에서 별도의 이메일 주소 당 최대 하나의 결과; 여러 회원이 이메일 주소를 공유하도록 허용 한 경우 외부 쿼리에 DISTINCT가 필요할 수 있습니다.

그러나 개미 점을 반복하려면 EXISTS 연산자를 다른 절과 함께 사용할 수 있어야합니다.