繁体   English   中英

DB2中两个表之间的共享列

[英]Shared columns between two tables in DB2

我的问题是该SO问题的重复,但我想针对DB2数据库来做,而其他问题则针对SQL Server

我在Schema BP有两个表TABLE1TABLE2 我希望找到在这两个表之间共享的列的名称。

DB Server上有很多架构,

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

我办公室的一个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;

我不确定@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' 

至于您没有看到适用于所有数据库平台的答案。 您是正确的-没有这样的答案-数据库平台差异很大。

FWiW:除了名称的有效交集以外,以下内容还显示了名称之间以及不匹配的名称之间的区别; 合格的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM