안녕하세요 도저히 쿼리 만들기가 힘이 들어서 질문 드립니다.
테이블 두개가 있습니다.
하나는 회원정보테이블, 하나는 그 회원들의 출결테이블(엄밀하게는 결석만 기록)이 있습니다.
이 상황에서 회원 테이블의 회원중에서 결석테이블에 3회이상 기록된 회원을 제외한 나머지 회원을 select 하는 쿼리입니다.
left join을 쓰면 될까요? 휴..
mysql 5.0버전을 사용중입니다.
도움이 절실히 필요한 상황입니다
감사합니다
A 테이블에 회원 정보, B 테이블에 출결 기록만 있다고 한다면, select a.id,count(*) as c from a left join b on a.id=b.id group by a.id having c < 3; 정도로 되지 않을까요? 속도 같은건 고려하지 않고 생각나는 대로 적어봤습니다. 아래는 예제로 작성해본 테이블과 결과입니다.
mysql> desc a; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | varchar(24) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 1 row in set (0.00 sec)
mysql> select * from a; +------+ | id | +------+ | a | | b | | c | | d | +------+ 4 rows in set (0.00 sec)
mysql> desc b; +-------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+-------------+------+-----+---------+-------+ | id | varchar(24) | YES | | NULL | | +-------+-------------+------+-----+---------+-------+ 1 row in set (0.00 sec)
mysql> select * from b; +------+ | id | +------+ | a | | a | | a | | b | +------+ 4 rows in set (0.00 sec)
mysql> select a.id,count(*) as c from a left join b on a.id=b.id group by a.id having c < 3; +------+---+ | id | c | +------+---+ | b | 1 | | c | 1 | | d | 1 | +------+---+ 3 rows in set (0.00 sec)
mysql>