2

2 つのテーブルからビューを作成する必要があります。それらは 1 つの列でリンクされていますが、あるテーブルではこの列が主キーであり、別のテーブルではこの列が重複している可能性があります。結果のビューには、この列の重複があってはなりません。2 番目のテーブルの行が CASE 条件を満たす場合、同じキーの他の行に関係なく、ビューの結果は「Y」になります。

スクリプトと結合結果を見てください。 結果の最初の行は正しくありません。削除する必要があります

Create table A1Table(
    a Integer not null
);

Create table A2Table(
    a Integer,
    b Integer
);

insert into A1Table values (1);
insert into A1Table values (2);
insert into A1Table values (3);
insert into A2Table values (1, 1);
insert into A2Table values (1, 100);

CREATE VIEW A12 AS select a1.a,
CASE
    WHEN a2.b=100 AND a2.b is not NULL THEN 'Y'
    ELSE 'N'
END AS report
FROM A1Table a1
Left JOIN A2Table a2 ON a2.a = a1.a;

-->

   a | report
  ---+--------
 **1 | N** -> *should be eliminated*
   1 | Y
   2 | N
   3 | N
4

2 に答える 2

2

a2.bJOIN条件で条件をつけます。

SELECT a1.a,
       IF(a2.b IS NOT NULL, "Y", "N") report
FROM A1Table a1
LEFT JOIN A2Table a2 ON a1.a = a2.a AND a2.b = 100

a, b組み合わせは で一意である必要があると想定していA2Tableます。組み合わせが重複する可能性がある場合は、次のサブクエリを使用する必要がありますDISTINCT

SELECT a1.a,
       IF(a2.b IS NOT NULL, "Y", "N") report
FROM A1Table a1
LEFT JOIN (SELECT DISTINCT a, b
           FROM A2Table
           WHERE b = 100) a2 ON a1.a = a2.a
于 2013-05-09T16:58:59.810 に答える