DB2中两个表之间的共享列

时间:2016-08-05 05:49:26

标签: sql db2

我的问题与this SO question重复,但我想为DB2数据库执行此操作,而其他问题则要求SQL Server

我在架构TABLE1中有两个表TABLE2BP。我希望找到这两个表之间共享的列的名称。

DB Server上有许多架构,

我没有看到任何适用于所有类型的数据库的通用答案。

3 个答案:

答案 0 :(得分:1)

我办公室的DB2 DBA告诉我这个,它给了我正确的结果,

SELECT BP.BP_COL FROM
(SELECT COLNAME AS BP_COL FROM SYSCAT.COLUMNS WHERE TABNAME='TABLE1' AND TABSCHEMA='BP' ) BP1
INNER JOIN
(SELECT COLNAME AS AR_COL FROM SYSCAT.COLUMNS WHERE TABNAME='TABLE2' AND TABSCHEMA='BP' ) BP2
ON BP1.BP_COL=BP2.AR_COL
WITH UR;

答案 1 :(得分:1)

我不确定为什么@SabirKhan答案有这么多的子查询 - 只需将元信息加入到自身中 - 内部联接将确保您从两个表中获得结果。

SELECT A.COLNAME AS DUP 
FROM SYSCAT.COLUMNS A 
JOIN SYSCAT.COLUMNS B ON A.COLNAME = B.COLNAME AND  B.TABNAME='TABLE2' AND B.TABSCHEMA='BP' 
WHERE A.TABNAME='TABLE1' AND A.TABSCHEMA='BP' 

至于您没有看到适用于所有数据库平台的答案。你是对的 - 没有这样的答案 - 数据库平台变化很大。

答案 2 :(得分:0)

FWiW:不仅仅是名称的有效INTERSECT,下面还显示了无与伦比的名称;合格的SYSCOLUMNS或类似的目录VIEW的规范以及相应的列名可能特定于DB2变体,因此可能需要进行调整,但是使用IBM DB2 for i 7.1 SQL,以下内容是成功的,如图所示:

设定:

 create table bp.TABLE1 (in_both char, common char, only_in_t1 char )
 ;
 create table bp.TABLE2 ( only_in_t2 char, in_both char, common char)
 ;

查询列:

 SELECT t1_col, t2_col                                              
 from ( select char(   column_name, 25) as t1_col                   
        from syscolumns                                             
        where    table_name = 'TABLE1' and    table_schema='BP' ) as t1
 full outer join                                                    
      ( select char(   column_name, 25) as t2_col                   
        from syscolumns                                             
        where    table_name = 'TABLE2' and    table_schema='BP' ) as t2
   on t1_col = t2_col                                               
 ; -- report from above query, with headings, follows [where a dash indicates NULL value]:
 T1_COL                     T2_COL    
 IN_BOTH                    IN_BOTH   
 COMMON                     COMMON    
 ONLY_IN_T1                 -         
 -                          ONLY_IN_T2