by 레거시 입문자 POSTGRESQL [2019.08.30 11:47:25]
현재 FUNCTION문을 통해, 두 테이블의 간의 특정값을 기준으로 하여 비교를 하려는 FUNCTION을 만들려고 하는데요...
감을 못잡겠다보니.... 조언을 좀 부탁드리겠습니다 ㅠㅠ
비교 조건
- A와 B 테이블의 특정 값을 기준으로 하여 비교를 한다.
- 이 때 특정 값은 A테이블과 B테이블의 명칭이 다를 수 있으며, 해당 이름을 지닌 데이터끼리 비교한다.
- 비교 시, 이름은 그저 키가 되는 것으로서 일치하는 요소가 아닌 해당 이름을 지닌 데이터를 가지고 오는 용도로서 사용된다.
- 데이터 비교 시 비교가 되는 키는 일련번호 원산지 출하지로 하며 해당 값을 비교했을 때 완전히 일치하는 내용이 존재한다면 가져오도록 한다.
EX)
A 테이블
NAME | SUB_NAME | 일련번호 | 원산지 | 출하지 | |
채소 | 무 | S0010 | 대한민국 | 강원도 | |
채소 | 배추 | S0020 | 대한민국 | 부산 | |
채소 | 오이 | S0030 | 대한민국 | 인천 | |
채소 | 호박 | S0040 | 대한민국 | 인천 |
B 테이블
NAME | 일련번호 | PRICE | 원산지 | 출하지 |
고랭지배추 | S0020 | 25000 | 대한민국 | 부산 |
고랭지배추 | S0178 | 2300 | 수입 | 강원도 |
어딘가의 배추 | S0179 | 2150 | 수입 | 강원도 |
배추 | S0020 | 12590 | 대한민국 | 부산 |
즉, 실제 FUNCTION 기동문은 다음과 같이 되게 하고 싶습니다.
SELECT * FROM [FUNCTION_NAME] (A 테이블, B 테이블)
= 비교 결과값
SUB_NAME 일련번호 원산지 출하지 NAME 일련번호 원산지 출하지
SUB_NAME | 일련번호 | 원산지 | 출하지 | NAME | 일련번호 | 원산지 | 출하지 |
배추 | S0020 | 대한민국 | 부산 | 고랭지배추 | S0020 | 대한민국 | 부산 |
배추 | S0020 | 대한민국 | 부산 | 배추 | S0020 | 대한민국 | 부산 |
조언해주시는 점에 있어 부족한 설명이 있다면, 말씀해주세요 추가하겠습니다.
이상, 잘 부탁드립니다. 항상 감사합니다.
#조금 설명이 모호하고 조건이 애매하여 알기 힘드실 것 같아 내용을 조금 수정하였습니다
아.. 수정하여 문의 주신 내용에서 대해서는 저도 잘 모르겠네요~ ^^;; 처음에 문의 주셨던 것에 대한 내용은 아래처럼 해보았습니다. 참고해보세요~ -- A테이블생성 create table A ( nm varchar(100) , gb varchar(100) , price bigint , orgin varchar(100)) ; -- B테이블생성 create table B ( nm varchar(100) , price bigint , orgin varchar(100)) ; -- A, B 데이터 삽입 insert into A values('채소', '무', 1000, '대한민국'); insert into A values('채소', '배추', 2000, '대한민국'); insert into A values('채소', '오이', 3000, '대한민국'); insert into A values('채소', '호박', 4000, '대한민국'); insert into B values('고랭지배추', 2000, '수입'); insert into B values('채소', 2350, '대한민국'); insert into B values('어딘가의배추', 1000, '수입'); insert into B values('채소', 1500, '수입'); -- 함수에서 return할 타입 CREATE TYPE A_B_return_type as ( a_nm varchar , a_gb varchar , a_price bigint , a_orgin varchar , b_nm varchar , b_price bigint , b_orgin varchar) ); -- FN_AB 함수 생성 create or replace function FN_AB (a_nm varchar, b_nm varchar) returns setof A_B_return_type as $$ select A.* , B.* from A , B where A.nm = a_nm and B.nm = b_nm and A.price = B.price; $$ language sql; -- 조회 select * from FN_AB('채소', '고랭지배추');