inner join 문에 primary_key를 select 하지 않으면?
페이지 정보
본문
inner join 문에 primary key를 select 하지 않으면?
HediSQL , PHP MY ADMIN 등의 원격 SQL 관리 툴에서 inner join을 자유롭게 활용할 줄 알면 굉장히 편리하고 장점이 많다.
그런데 inner join 문을 실행해서 결과 레코드가 출력되었는데 해당 값을 수정하려고 하니까 수정이 되지 않는 즉 read only 상태라고 질문하는 초보분들이 꽤 있다.
그 분들의 결과 레코드를 보면 id 등의 primary key에 해당하는 컬럼이 보이지 않는다.
primary key가 없으면 DBMS는 해당 데이터가 연결된 column/row를 구분할 수 없으므로 수정하지 않는다 아니 수정될 수가 없다.
** 참고로 priimary key를 두개 select 하는 경우 즉 두 테이블의 primary key를 모두 select 하는 경우도 read only 상태가 된다.
---------
SELECT a_table.title, a_table.hit FROM a_table INNER JOIN b_table ON a_table.id = b_table.pid WHERE a_table.id > 200;
>> a_table과 b_table을 INNER JOIN 한다. a_table의 id column과 b_table의 pid가 동일한 row를 대상으로. 그리고 a_table의 Id가 200 초과인 row 만.
>> 결과는 출력되지만 해당 결과 레코드에서 값을 수정할 수가 없다.
>> primary key가 SELECT 되지 않았기때문.
>> 따라서 다음과 같이 id를 포함해야한다.
SELECT a_table.id, a_table.title, a_table.hit FROM a_table INNER JOIN b_table ON a_table.id = b_table.pid WHERE a_table.id > 200;