2013-02-08 2 views
0

나는 내 postgresql 데이터베이스에 두 개의 테이블을 가지고 있습니다. 두 테이블의 열이 같습니다.Postgresql 테이블이 교차합니다

null이 아닌 tableA의 값을 어떻게 선호합니까? 내가 싶어

TableA 
id | name 
1 | val_a_1 
2 | val_a_2 
3 | (null) 

TableB 
id | name 
1 | (null) 
2 | val_b_2 
3 | val_b_3 

결과 : 열이 많이 있기 때문에 나는이처럼 가지고 있지만 더 복잡 한 지금은

id | name 
1 | val_a_1 
2 | val_a_2 
3 | val_b_3 

.

SELECT * 
CASE 
WHEN TableA.name is NULL or TableA.name = '' 
THEN (SELECT TableB.name FROM TableB where TableB.id = 1) 
ELSE TableA.name 
END 
AS name, 
CASE 
. 
. another columns 
. 
END 

감사

답변

2

왜 안 COALESCE을 사용할 수 있습니까? TABLEA 모든 recordID와 가정

SELECT a.ID, 
     COALESCE(a.name, b.name) AS "Name" 
FROM TableA a 
     INNER JOIN TableB b 
      ON a.ID = b.ID 

COALESCE 함수 (인수의 제을 반환 표 2에 존재 더있을 수있다 인수는)이 아닌 null입니다.

모두 자체가 아니라 COALESCE입니다. 당신이 완전 외부를 사용할 수 있습니다

+0

글쎄, 우리는 여기에 몇 가지 합병증을 가지고있다. 우리가 선택하고자하는 데이터는 서로 독립적이며 케이스 /에 공통/유사 ID가 없습니다. 또한 .. 우리는 약 25 개의 컬럼을 가지고 있습니다. 따라서 모든 컬럼에 대한 "coalesce (a.name, b.name) AS name"은 스트레스를받을 것입니다 :) 이해한다면 - tableA에 하나의 고유 한 행이 있습니다. tableB에서 하나의 고유 한 행을 선택하고이 두 개의 선택된 행을 "결합"합니다. 마찬가지로, 합쳐 지지만 두 개의 선택된 행 사이. 우리는 그 때의 경우를 가지고 있습니다. 그러나 당신이 무엇을 의미하는지 안다면 그것은 또한 매우 스트레스가 많습니다 :) – anti

1

는 TableB의에 TABLEA에서가 아니라 존재의 가치와 그 반대에 대한 가입 :

select coalesce(tableA.ID, tableB.ID) as ID, 
coalesce(tableA.Name, tableB.Name) as Name 
from tableA full outer join tableB on tableA.ID = tableB.ID 
관련 문제