3

たとえば、このような2つのテーブルがあります

data have;
input name $ status $;
datalines;
A    a
B    b
C    c
;;;;
run;

2 番目のテーブル:

data addon;
input name $ status $;
datalines;
A    a
C    f
D    d
E    e
F    f
B    z
;;;;
run;

以下のような結果を得るにはどうすればよいですか。

B    b
C    c
C    f
D    d
E    e
F    f
B    z

行 A - a は 2 つのテーブルから同じであるため、削除されました。左結合を使用しようとしていますが、結果が正しくありません。助けてください、事前に感謝します。本当に感謝しています。

4

5 に答える 5

1

これを試して:

  SELECT COALESCE(table1.input, table2.input) AS input
         , COALESCE(table1.status, table2.status) AS status
    FROM table1
         FULL OUTER JOIN table2 ON table1.input = table2.input
         AND table1.status = table2.status
   WHERE (table1.input IS NULL OR table2.input IS NULL)
ORDER BY 1

出力:

INPUT STATUS
----- ------
B     b      
B     z      
C     f      
C     c      
D     d      
E     e      
F     f      
于 2013-04-01T05:42:12.330 に答える
1

別の方法

data have;
 input name $ status $;
 datalines;
A    a
B    b
C    c
;;;;
run;

data addon;
 input name $ status $;
datalines;
A    a
C    f
D    d
E    e
F    f
B    z
;;;;
run;

Data Together;
 Set have addon;
 /* If the data sets were already sorted */
 /* By Name Status;                      */
/*  Then skip the Proc Sort              */
Run;

Proc sort data=together;
 by name status;
Run;

Data final;
 Set Together;
 by name status;
 if first.status and last.status;
Run;
于 2013-04-01T13:37:22.300 に答える
1

これをテストする時間はありませんが、これはほぼ正しいです。MySQL は except をサポートしていないため、SQLFiddle では機能しません。

select * from (
  select * from have union select * from addon)
except
( select * from have, addon 
   where have.status=addon.status and have.name=addon.name)
于 2013-04-01T12:29:03.413 に答える