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
운영게시판
최근게시물
MySQL Q&A 27774 게시물 읽기
No. 27774
db초보입니다. 쿼리문 하나만 좀 봐주세요... ㅠㅠ
작성자
db초보
작성일
2008-09-08 10:47
조회수
6,802

A라는 테이블에 soap라는 필드와 UserID라는 필드가있고 
B라는 테이블에 soap라는 필드와 UserID라는 필드가있습니다. 


A 테이블에 있는 soap는 낱개 갯수를 입력해놓았고, 
B 테이블에 있는 soap는 A.soap의 합을 저장해놓으려고 했는데요 

프로그램을 잘못짜서 A.soap의 합과 B.soap의 값이 다릅니다. (B.soap의 값이 더 큰상황...)
일단 프로그램은 수정을 해서 앞으로 그런 일이 발생되진 않는데 

이전에 반영해놓은 데이터가 엄청나게 많아서 이걸 처음부터 다시 입력하려면 시간이 엄청 오래걸려 
1. 쿼리문으로 A.soap의 합과 B.soap의 값이 틀린놈을 찾아 
2. B.soap의 값을 A.soap의 합의 값으로 update하려고 합니다. 

죄송하지만 1,2번 따로따로 쿼리문좀 부탁드릴께요.. 

1번에서도 헤메고 있네요.. ㅠㅠ 도움 부탁드립니다.. ㅠㅠ

이 글에 대한 댓글이 총 6건 있습니다.
1.검정
select A.UserID,sum(A.soap) a1,B.soap b1
from A,B where A.UserID=B.UserID
group by A.UserID
having a1<>b1


2.업데이트
update B,(
 select A.UserID,sum(A.soap) a1,B.soap b1
 from A,B where A.UserID=B.UserID
 group by A.UserID
 having a1<>b1
) C
set B.soap=C.a1
where B.UserID=C.UserID
떠돌이님이 2008-09-09 10:00에 작성한 댓글입니다. Edit

답변 감사드립니다. 


근데 1번은 잘 되는데 2번항목은 잘 안되네요.. 왜 그런지 한번 봐주시겠어요?? 


테이블구조 및 A 테이블 데이터 예제입니다. 


A테이블

myid | soap

-------+----- 

111   | 2 

111   | 1 

222   | 3 

222   | 1 

333   | 1 

333   | 1


B테이블 

Intseq (auto incres입니다) | soap

-------+----- 

111 | 2 

222 | 3 

333 | 2 


==========================================================================



요렇게 될때 A테이블의 111값의 soap필드 합의값이 B테이블의 111 필드값과 같아야하는데 

그렇지가 않아서요.. 


이렇게 될때 문제가 발생하나요? 


에러 메세지는 " The target Table c of the UPDATE is not updatable 입니다. " 


db초보님이 2008-09-09 15:00에 작성한 댓글입니다. Edit

서브쿼리가 지원되는 버젼인가요??

떠돌이님이 2008-09-10 09:10에 작성한 댓글입니다. Edit

네.. mysql 5.0 버전입니다.. 

버전에 문제가 있는건가요?
db초보님이 2008-09-10 10:56에 작성한 댓글입니다. Edit
각각 다음과 같은 쿼리 문으로 해결이 가능하시리라 생각합니다.

다른 놈 골라서 보기

SELECT aa.UserID AS UserID, aa.soap AS a_soap_sum, bb.soap AS b_soap
FROM(
    SELECT UserID, SUM( soap ) AS soap
    FROM tableA
    GROUP BY UserID
) AS aa
INNER JOIN tableB AS bb ON aa.UserID = bb.UserID
WHERE aa.soap <> bb.soap;


다른 놈 update 하기

UPDATE tableB
    INNER JOIN (
        SELECT UserID, SUM( soap ) AS soap
        FROM tableA GROUP BY UserID
    ) AS aa ON tableB.UserID = aa.UserID
SET tableB.soap = aa.soap
우욱님이 2008-09-10 16:27에 작성한 댓글입니다. Edit


아 답변 감사드립니다. 

떠돌이님 답변도 왜 안되는지 알았습니다. 

두분 모두 정말 감사 드립니다.. ^^
db초보님이 2008-09-10 18:15에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
27777mysql 4.0.X (euc_kr) 데이터를 MySQL4.1 (utf-8)로 이전하고싶습니다. [1]
이준규
2008-09-09
4425
27776트리거 생성시 변수사용 아시는분..
떠돌이
2008-09-09
4046
27775[질문] 데이터베이스 생성 오류입니다. [1]
고준영
2008-09-08
5203
27774db초보입니다. 쿼리문 하나만 좀 봐주세요... ㅠㅠ [6]
db초보
2008-09-08
6802
27773oracle의 linesize , pagesize와 같은 기능이 있나요?
정필준
2008-09-07
4546
27772mysql 5.0 원격 접속 및... 클라이언트 질문 드려요 [1]
헬프욤
2008-09-05
4303
27771DB 백업 질문 있습니다.. ^^ [1]
유승효
2008-09-04
4044
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다