SELECT a.question, a.simpleQuestion, a.answerCnt - count( b.seq ) AS Cnt
FROM dccg_question AS a
LEFT JOIN dccg_answe AS b ON a.seq = b.question_seq
WHERE a.seq = 5 AND b.ip = \'123\'
GROUP BY a.question, b.seq LIMIT 0, 30
위 쿼리가 있을때...
조건에서
a.seq=5 는 있고
b.ip 가 없을때
a.라는 테이블에 있는 내용은 나와야하지않나요?
b.ip 라는 조건에 걸려서 a 라는 테이블의 값까질 나오질 않아서
제가 먼가 잘못이해를 하고있나 해서 질문을 드립니다.
FROM dccg_question AS a
LEFT JOIN dccg_answe AS b ON a.seq = b.question_seq
WHERE a.seq = 5 AND b.ip = \'123\'
GROUP BY a.question, b.seq LIMIT 0, 30
위 쿼리가 있을때...
조건에서
a.seq=5 는 있고
b.ip 가 없을때
a.라는 테이블에 있는 내용은 나와야하지않나요?
b.ip 라는 조건에 걸려서 a 라는 테이블의 값까질 나오질 않아서
제가 먼가 잘못이해를 하고있나 해서 질문을 드립니다.
if( a.seq == 5 && !strcmp(b.ip, \"123\") )
으음?????????????????????????????????
쿼리문의 처리순서를 이해하시면 되겠습니다. join 절 보다 where 절이 먼저 수행됩니다. 그러므로 두 조건을 \"모두 만족하는\" 레코드 부터 쫙 뽑아 내겠죠 조인은 그다음입니다.
그래도 left join인데 a라는 테이블이 조건이 만족하는데 안나오는게 맞는건가요??
조인절의 조건을 비교해야 하는데, 그 레코드가 없다는 말입니다. 이미 where 절에서 제외 되어버렸으니까요
그렇군여.. 제가 먼가 잘못 이해하고있었네여 ㅠ 감사합니다. 에공 쿼리 다시 고쳐봐야겠네여
당연한 상황입니다. 예를 들어 left join이 먼저 수행됐다고 쳐도 결과 테이블이 WHERE 절을 만족해야되니 마찬가지로 \"둘 다 만족하는\" 레코드만 나오게 됩니다
저런경우 join으로만 해결할수는 없나요? 서브쿼리를 쓰자니 db에서 서브쿼리를 지원을 안해서여 ㅠ
Hear님 join 이 먼저 수행되진 않습니다. 그리고 논리상으로 조인이 먼저 수행된다면 where 절은 그후에 수행된다는 것인데 이건 말이안되죠. 쿼리에는 당연히 순서가 있습니다. 몰아서 비교하는게 아닙니다