728x90
반응형

 일반
update 테이블명 set 필드명=값 where 조건절 ....

* join update

[Sysbase 다른테이블과의 조인 방법]
지금까지 사용해본 DB가 몇개가 되는지
1. ORACLE
2. MS-SQL
3. DB2
4. SYSBASE

ㅋㅋㅋ머 Database야 다 거기서 거기인듯하다.
오늘은 회사에서 사용하고 있는 Sysbase 에 대하여 다른테이블과의 조인방법에 대해서
서술하고 마칠려고 한다.

DataBase가 여러가지 이지만 조금씩 쓰는 방법이 달라 이렇게 기록하고 메모 해야 헤메지 않고 찾아 쓰지
어느 어플에 보면 그런말이 있다 기억은 기록을 이기지 못한다.완전 공감.


1. 다른테이틀 조인 방법
  update A
  set a1 = b.a1, a2 =b.a2
  from A, B
  where A.a = B.a
  위의 예제를 보면 set 다음에 from 절을 사용하면서 테이블간의 join 을 거는것을 볼 수 있다


 

 

728x90
반응형

디스플레이의 가독성은 인접한 행의 배경색을 번갈아 가며 개선할 수 있습니다.

 AlternatingRows 속성이 True 로 설정 되면 그리드는 기본 제공 스타일 OddRow를 사용하여 홀수 행(첫 번째 표시되는 행은 1)을 표시하고 기본 제공 스타일 EvenRow를 사용하여 짝수 행을 표시합니다.

728x90
반응형

PB Native에서 Check out을 하였는데 오류 메세지 발생

이리저리 보아도 문제는 없었음. 확인 내용

Source Control System = PB Native
userid = master
Project = Q:\DEVELOP\PDAT-EMTALA
Local root Directory = Q:\DEVELOP\PDAT-EMTALA

문제 없음, 그러나 Project 파일 네트워크 드라이브 연결 시 권한이 Read only로 되어 있음을 발견

Read only는 GetLastVesrion은 가져오나 Check in / out은 되지 않음.

수정완료

728x90
반응형


파워빌더를 실행하거나 특정 오브젝트를 열 때, 아무런 이유 없이 다운될 때가 있습니다.

대체로 파워빌더 레이아웃에 순간적인 문제가 생겨서 발생하는 현상입니다.


1. 특정 Object 를 열면 다운될 때 (Datawindow 를 열면 자주 발생)

   윈도우키 + R - regedit : 레지스트리 편집기 오픈

   레지스트리 - HKEY_CURRENT_USER - Software - Sybase - PowerBuilder - Layout - Default

   열리지 않는 Object 값 삭제

-> 파워빌더 실행해서 그 Object를 다시 열면 디폴트 레이아웃으로 변경되어 있습니다.


2. 파워빌더를 실행함과 동시에 다운될 때

   윈도우키 + R - regedit : 레지스트리 편집기 오픈

   레지스트리 - HKEY_CURRENT_USER - Software - Sybase - PowerBuilder - Workspace - 버전

   다운되는 Workspace 폴더 삭제

-> 파워빌더 실행해서 Workspace 를 다시 오픈하면 됩니다.

728x90
반응형

#DB2 #테이블복구 #조인업데이트

테이블 복사 방법
CREATE TABLE nvhnlib.EBBAS43I0P_if AS ( SELECT * FROM nvhnlib.EBBAS43I0P) WITH DATA

테이블 복구 UPDATE EBBAS44i0P t1 
SET t1.opt_nm = ( SELECT t2.opt_nm
FROM EBBAS44i0P_0204 t2 
WHERE t1.item_cd=t2.item_cd) 

다른 테이블 Join 후 Update
UPDATE EBBAS44i0P t1 
SET t1.opt_nm = ( SELECT t2.item_cd
FROM test_kim t2 
WHERE t1.item_cd=t2.vnd_cd) 
WHERE t1.item_cd IN  ( SELECT t2.vnd_cd
FROM test_kim t2 

728x90
반응형

MSSQL

MSSQL에서는  WITH ROLLUP을 사용한다.

SELECT country, product, sum(profit) FROM sales GROUP BY country, product WITH ROLLUP;

ROLLUP 적용 전 (왼쪽) VS ROLLUP을 적용한 모습(오른쪽)

countryproductsum(profit) countryproductsum(profit)

Finland Computer 1500   Finland Computer 1500
Finland Phone 110   Finland Phone 110
India Calculator 150   Finland NULL 1610
India Computer 1200   India Calculator 150
USA Calculator 125   India Computer 1200
USA Computer 4200   India NULL 1350
USA TV 250   USA Calculator 125
        USA Computer 4200
        USA TV 250
        USA NULL 4575
        NULL NULL 7535

ROLLUP은 집계한 기준값을 NULL값으로 대체한다. COALESCE을 활용하면 원하는 텍스트를 넣을 수 있다.

( MySQL에서는 IFNULL로 대체 가능)

SELECT COALESCE(country,"ALL countries") as country, 
       COALESCE(product,"ALL products") as product, 
       sum(profit) FROM sales GROUP BY country, product WITH ROLLUP;

countryproductsum(profit)

Finland Computer 1500
Finland Phone 110
Finland ALL products 1610
India Calculator 150
India Computer 1200
India ALL products 1350
USA Calculator 125
USA Computer 4200
USA TV 250
USA ALL products 4575
ALL countries ALL products 7535
728x90
반응형

SQL로 중복 데이터를 확인 및 삭제하는 법을 알아본다.

사용 데이터

idfirst_namelast_nameemail

1 Carine Schmitt carine.schmitt@verizon.net
2 Jean King jean.king@me.com
3 Peter Ferguson peter.ferguson@google.com
4 Janine Labrune janine.labrune@aol.com
5 Susan Nelson susan.nelson@comcast.net
..

출처 : MYSQLTUTORIAL (아래 Reference에 명시)

중복 데이터 확인

공통

GROUP BY와 HAVING을 사용하면 된다. 중복을 확인할 컬럼의 수에 따라 조건을 추가해주면 된다.

SELECT first_name, last_name, email, COUNT(*) as cnt
FROM contacts
GROUP BY email, first_name, last_name
HAVING COUNT(email) > 1 AND COUNT(first_name) > 1 AND COUNT(last_name) > 1;

first_namelast_nameemailcnt

Janine Labrune janine.labrune@aol.com 4
Jean King jean.king@me.com 2
Roland Keitel roland.keitel@yahoo.com 3
Susan Nelson susan.nelson@comcast.net 3

중복 데이터 삭제

중복 데이터를 삭제하기 위해서는 먼저 남길 데이터를 제외한 데이터를 구분할 컬럼(e.g. id)의 값을 구해야 한다.

MySQL

삭제할 데이터 id 확인

SELF JOIN을 통해 중복된 row의 id를 확인하는 방법이지만 결과를 보면 데이터가 오히려 중복되어 더 생기는 현상이 있다.

(삭제 쿼리에 활용할 경우, 문제는 없어보임)

SELECT t1.*
FROM contacts t1 JOIN contacts t2
ON t1.first_name=t2.first_name AND t1.last_name=t2.last_name AND t1.email=t2.email
WHERE t1.id > t2.id;

MySQL

 

데이터 삭제 쿼리

MySQL에서 지원하는 DELETE JOIN 방식을 활용한다.

contacts(t1) 테이블에서 FROM 절 이후 JOIN된 결과에 해당하는 ROW들을 삭제한다는 의미이다.

DELETE t1 FROM contacts t1 
JOIN contacts t2
ON t1.first_name=t2.first_name AND t1.last_name=t2.last_name AND t1.email=t2.email
WHERE t1.id > t2.id;

PostgreSQL & MySQL 8

WINDOW FUNCTION을 지원하는 경우, ROW_NUMBER를 활용하여 처리할 수 있다.

PARTITION BY로 중복된 컬럼을 지정하고, ROW_NUM > 1을 설정하여 삭제할 데이터만 가져올 수 있다.

삭제할 데이터 id 확인
SELECT *
FROM ( SELECT id, first_name, last_name, email,
       ROW_NUMBER() OVER (PARTITION BY first_name, last_name, email) as row_num
       FROM contacts ) a
WHERE row_num > 1
ORDER BY first_name; -- 단순 정렬 용도

idfirst_namelast_nameemailrow_num

7 Janine Labrune janine.labrune@aol.com 2
9 Janine Labrune janine.labrune@aol.com 3
13 Janine Labrune janine.labrune@aol.com 4
15 Jean King jean.king@me.com 2
17 Roland Keitel roland.keitel@yahoo.com 2
18 Roland Keitel roland.keitel@yahoo.com 3
8 Susan Nelson susan.nelson@comcast.net 2
16 Susan Nelson susan.nelson@comcast.net 3
간단한 데이터 삭제 쿼리

데이터가 적을 경우, 간단하게 IN 으로 해당 id들을 제거할 수 있다.

DELETE FROM contacts
WHERE id IN (SELECT id
             FROM ( 
                 SELECT id, ROW_NUMBER() OVER (PARTITION BY first_name, last_name, email) as row_num
                 FROM contacts 
                 ) tmp
             WHERE row_num > 1);
데이터 삭제 쿼리

PostgreSQL에서는 DELETE + USING 방식을 활용한다. 데이터가 많은 것을 고려할 경우, 이 방법을 먼저 사용해야 할 듯하다.

JOIN 과 ON 대신 USING과 WHERE이 사용된다.

DELETE FROM contacts t1 
USING contacts t2
WHERE t1.first_name=t2.first_name AND t1.last_name=t2.last_name AND t1.email=t2.email AND t1.id > t2.id;

속도가 느릴 경우

데이터가 너무 많을 경우, 일부분씩 나누어서 DELETE를 하는 것을 고려해볼 수 있다. (특히, 실 사용중인 DB인 경우)

위에서 설명한 삭제할 id를 미리 테이블로 만들어 DELETE JOIN에 사용하는 것이다. (JOIN 연산을 단순화한다.)

728x90
반응형

1. WORKOBJLCK       F4    엔터

2. 오브젝트 :  GKGGINF (TABLE명)

3. 라이브러리 : NDYKLIB

4. 오브젝트 유형 : *FILE            엔트

5. 사용중인 사용자가 나타나는데 옵션에 4(종료)시킨 후 필드 추가한다. 끝

+ Recent posts