2011-02-10 3 views
0

2つの表に一致してはならないEMPLOYEE_NUMBERと給料。連結列は、私は完全なnoobieだので、私はただ普通の言葉でこれをあげるよ

私が探しているのは、Bには存在しないAからemployee_numberとsalaryの 'combination'の行を抽出することですが、employee_numberとsalaryはそれぞれ両方に存在する必要があります。

私は(..これは「雄弁」問題を提示するだけで、間違った関数に 名を許してください)2つの以下の条件でそれをやってする探しています:

1)A.unique(EMPLOYEE_NUMBER) B.unique(EMPLOYEE_NUMBER)AND A.unique(給料) はB.unique(給料)に存在する

2)A.concat(EMPLOYEE_NUMBER、給料)<> B.concat(EMPLOYEE_NUMBER、給与)

に存在します

注:AとBは異なるデータベースにありますので、私はoこれを行うにはdblinkを使用します。

これは私がやってみましたです:

SELECT distinct * FROM dblink('dbname=test1 port=5432 
     host=test01 user=user password=password','SELECT employee_number,salary, employee_number||salary AS ENS FROM empsal.A') 
AS A(employee_number int8, salary integer, ENS numeric) 
LEFT JOIN empsalfull.B B on B.employee_number = A.employee_number AND B.salary = A.salary 
WHERE A.ENS not in (select distinct employee_number || salary from empsalfull.B) 

をしかし、私はそれがスプレッドシートを使用してクロスチェックしていたとして、それは間違っていることが判明し、私は同じ結果を得ることはありません。

ご協力いただければ幸いです。ありがとう。

答えて

0

あなたはこれらの行に沿って何かを探していると思います。

(サンプルデータ)

create table A (
    employee_number integer primary key, 
    salary integer not null 
); 

create table B (
    employee_number integer primary key, 
    salary integer not null 
); 

insert into A values 
(1, 20000), 
(2, 30000), 
(3, 20000); -- This row isn't in B 

insert into B values 
(1, 20000), -- Combination in A 
(2, 20000), -- Individual values in A 
(3, 50000); -- Only emp number in A 

select A.employee_number, A.salary 
from A 
where (A.employee_number, A.salary) NOT IN (select employee_number, salary from B) 
    and A.employee_number IN (select employee_number from B) 
    and A.salary IN (select salary from B) 

出力:3、20000

1

は、理解を容易にするために、私は、データベース・リンクを残しました。 最初のものは、Aの従業員番号とAのsaleryに等しいBの行を選択するため、それらの連結値も同じになります(これが真ではないと思われる場合は、テストデータを入力してください)。あなたがNULLを含む行とのトラブルを持っている場合は

SELECT * from firsttable A 
LEFT JOIN secondtable B where 
    (A.employee_number = B.employee_number AND a.salery != b.salery) OR 
    (A.salery = B.salery AND A.employee_number != B.employee_number) 

することは、あなたも、このように気にいらを試してみてください: AND(a.salery = b.salery OR(a.saleryがNULLで、b.saleryがNULLではありません)!または(a.salery is not NOT NULLおよびb.salery IS NULL))

関連する問題