database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
ㆍPostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
PostgreSQL Q&A 6294 게시물 읽기
No. 6294
[질문]테이블 두 개를 검색할 때
작성자
박병호(bhpark70)
작성일
2005-08-29 23:13
조회수
1,901

php와 pgsql로 홈페이지 하나 만들고 있습니다.

 

unused와 used라는 테이블이 있고

이 테이블에는 id라는 필드가 있습니다.

 

어떤 번호(id)를 사용하기 위해서는 먼저 unused라는 테이블에 등록을 하고

사용할 때는 unused라는 테이블에서 해당 값을 지우고 used에 기록을 합니다.

 

이때 새로운 번호를 unused라는 테이블에 insert할려고 하는데

원칙은 unused, used테이블에 없는 번호 이어야 합니다.

 

그래서 php에서 unused라는 테이블에 없는 번호인가

used라는 테이블에 없는 번호인가를 확인하기 위해 두 번 쿼리를 날립니다.

 

이걸 sql 문을 잘 만들면 혹시 한번의 쿼리로도 가능할까요?

 

이 글에 대한 댓글이 총 3건 있습니다.

1, 시퀀스를 쓸 수 없나요? unused에 새 자료를 등록 할 때에 시퀀스에서 id를 받아서 쓰면 이미 있는지 확인할 일이 없어 보입니다.

 

2, 두 테이블에서 한번의 쿼리로 확인을 하려면 UNION을 쓰면 되지 않을까요?

SELECT 'unused' FROM unused WHERE id=123

UNION

SELECT 'used' FROM used WHERE id=123

이렇게 해서 얻어진 결과가 하나라도 있으면 이미 쓰는 것이겠죠?

 

3, 이건 디자인에 관한건데요. 굳이 unused와 used로 테이블을 나눌 필요가 있을까요? 그냥 goods라는 table에 flag를 하나 만들어서 새것인지 아닌지를 표시하는 것이 간단하지 않을까요?

박성철(gyumee)님이 2005-08-30 00:59에 작성한 댓글입니다.

특별한 필요 때문에 테이블 2개로 나누었습니다.

알려주신 방법 중 2번째 방법이 좋겠네요.

감사합니다.

박병호(bhpark70)님이 2005-08-30 17:12에 작성한 댓글입니다.

예.. 그렇군요.

그런데 이런식의 작업을 할 때에 주의할 것은 같은 ID를 가진 자료가 동시에 생성될 수 있다는겁니다.

id 유무를 확인하고 자료를 입력하는 사이에 또 다른 사용자가 동시에 자료를 등록하면 같은 id를 사용할 가능성이 있는거죠. 특히 id가 순차적으로 증가하는 것이라면 말이죠. 아마도 순차 증가가 아니니까 이런식으로 처리를 하시는 것이겠지만 감안 하셔야 할 것 같습니다.

이런 경우에는 table lock을 거는것이 가장 확실한 방법이라고 생각합니다.

박성철(gyumee)님이 2005-08-30 20:16에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
6299statement_timeout 의 조건과 효과를 알고 싶습니다. [2]
송효진
2005-08-30
2213
6298sequence를 Rename하는 방법이 있나요? [4]
최정대
2005-08-30
2045
6297PostgreSQL 8.1 Enters Beta [5]
신기배
2005-08-29
3364
6294[질문]테이블 두 개를 검색할 때 [3]
박병호
2005-08-29
1901
6293자동으로 계산되는 필드가 있는지..?? [5]
몰라
2005-08-26
2080
6292psql 쓰는데 트랜잭션 관리가 이상한 듯 합니다 [2]
코모리
2005-08-25
2855
6291구문에러..
장재혁
2005-08-25
1804
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다