Sql 如何在某些表为空的情况下执行联合

Sql 如何在某些表为空的情况下执行联合,sql,sas,union,Sql,Sas,Union,我希望在3个表之间执行并集,我知道其中1个表没有值(空表)。 我使用SAS PROC SQL时出错: 错误:表WORK.B没有任何列 我的代码: select * from work.A union select * from work.B union select * from work.C 据我所知,我需要使用EXIST,以便只合并现有表。日志错误消息还指出PROC SQL要求其每个表至少有一列。 您可以使用datastepSET语句堆叠(合并)数据,然后SORT清除重复项 例如: d

我希望在3个表之间执行并集,我知道其中1个表没有值(空表)。 我使用SAS PROC SQL时出错: 错误:表WORK.B没有任何列

我的代码:

select *
from work.A
union 
select *
from work.B
union 
select *
from work.C

据我所知,我需要使用EXIST,以便只合并现有表。

日志错误消息还指出
PROC SQL要求其每个表至少有一列。

您可以使用
data
step
SET
语句堆叠(合并)数据,然后
SORT
清除重复项

例如:

data x;
  set sashelp.class (where=(name=:'A'));

data y;
  stop;

data z;
  retain age weight name height;
  set sashelp.class (where=(name in: ('A', 'J')));
run;

data want;
  set x y z;
run;

proc sort data=want nodupkey;
  by _all_;
run;

错误不是表B为空,而是表WORK.B没有任何列。我不确定SAS,但对于union,您应该从所有表中选择相同数量、相同顺序和相同数据类型的列。因此,如果您使用*那么A和B的表结构应该是相同的,联合一个空表有什么意义呢?@metadata所有表都有相同的列数、相同的类型和顺序,问题是因为表B是空的。当我执行SQL时,我不知道一个表是否为空。请尝试在select中使用列名,而不是*由于某些原因,在“未创建”表时,SQL不允许并集。但是在数据步骤中使用SET语句就可以解决这个问题!谢谢