[英]Shared columns between two tables in DB2
我的问题是该SO问题的重复,但我想针对DB2
数据库来做,而其他问题则针对SQL Server
。
我在Schema BP
有两个表TABLE1
和TABLE2
。 我希望找到在这两个表之间共享的列的名称。
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.