从同一个表但不同的数据库中获取一列连接

Posted

技术标签:

【中文标题】从同一个表但不同的数据库中获取一列连接【英文标题】:Get One column in join from same table but different database 【发布时间】:2016-07-04 07:41:41 【问题描述】:

我有两个数据库。

一个。 DB_1 b。 DB_2

假设,我目前正在使用DB_1 进行以下查询

Select top 1 a.mkey,convert(varchar(255), a.ref_date,103) as REF_DATE,  cd.type_desc as DOC_TYPE,  a.doc_no as INWARD_NO, 
                       cr.type_desc as dept_received, e.emp_name as EMP_RECEIVED,    
                       convert(varchar(255), a.doc_date,103) as date,   
                       a.to_user, a.No_of_pages, Ref_No,    
                       e.emp_name as NAME,    
                       coalesce(e.Email_Id_Official, 'test@test.com') EMAILID, a.Party_Name                           
                from inward_doc_tracking_hdr a left join   
                     type_mst_a cd   
                     on a.doc_type = cd.master_mkey left join  
                   type_mst_a cr   
                     on a.dept_received = cr.master_mkey 
                     and cr.type_code='D1'  
                     left join  emp_mst e  
                     on a.emp_received = e.mkey   
                     where a.emp_received is not null and
                        a.mkey = 146

现在我想要的是。我想从另一个数据库加入同一张表(DB_2)怎么做??

更新

我的另一个数据库列名是Inward_ref_key,它的表名是inward_doc_tracking_hdr

【问题讨论】:

您需要确保您可以从 DB1 链接到 DB2,然后使用 DB_2.. 来获得您想要的。 @Raffaello.D.HukeL 是的,它们在同一台服务器上。我也可以链接它们。但我被 joi 问题困住了 假设您在 DB2 中有 schema.table1,您可以在 DB1 上执行此操作吗? "select * from [DB2].schema.table1" 请记住,DB2 是 DB2 的名字,如果你可以做这个选择部分,那么连接就是这样。我会通过发布答案给你一个例子XD 【参考方案1】:

如前所述。请看下面的答案。

SELECT TOP 1 a.mkey,
    CONVERT(VARCHAR(255), a.ref_date,103) AS REF_DATE, 
    cd.type_desc AS DOC_TYPE, 
    a.doc_no AS INWARD_NO, 
    cr.type_desc AS dept_received, 
    e.emp_name AS EMP_RECEIVED, 
    CONVERT(VARCHAR(255), a.doc_date,103) AS DATE, 
    a.to_user,
    a.No_of_pages,
    Ref_No, 
    e.emp_name AS NAME, 
    COALESCE(e.Email_Id_Official, 'test@test.com') EMAILID, 
    a.Party_Name, 
    doc_no = (SELECT TOP 1 doc_no FROM erp190516.dbo.inward_doc_tracking_hdr WHERE mkey = a.inward_ref_key)
    OLD_DOC_NO 
FROM inward_doc_tracking_hdr a 
LEFT JOIN type_mst_a cd 
    ON cd.master_mkey  = a.doc_type  
LEFT JOIN type_mst_a cr 
    ON cr.master_mkey = a.dept_received 
    AND cr.type_code='D1' 
LEFT JOIN emp_mst e 
    ON  e.mkey = a.emp_received
WHERE a.emp_received IS NOT NULL 
AND a.mkey = 146

【讨论】:

是的,这就是我想要的。谢谢@mvisser。【参考方案2】:

假设两个数据库位于同一台服务器上,您只需将另一个数据库指定为表标识符的一部分:

DB_2.dbo.inward_doc_tracking_hdr

如果您的表属于不同的架构(不是dbo),请指定该架构名称。

【讨论】:

但是如何通过别名加入列?? 看,我有Inward_ref_key 列的inward_doc_tracking_hdr 应该来自db_2。我想加入那个。我会怎么做 一如既往。一个来自DB_1,另一个来自DB_2这一事实无关紧要——你可以给每个人任何你想要的别名...... 你能告诉我一件事吗,我需要在a.party_name 之后添加一个子查询。像这样a.Inward_ref_key (Select doc_no from erp190516.dbo.inward_doc_tracking_hdr) Ref 对吗?我试过了,但它不起作用 我试图获取 Inward_ref_key 的子查询给出错误。【参考方案3】:

为了从另一个数据库中引用一个表,你可以这样:

DB_2.<schema>.<table_name>

如果它们有不同的排序规则,请小心

【讨论】:

【参考方案4】:
SELECT local.name AS LocalLogins, linked.name AS LinkedLogins  
FROM master.sys.server_principals AS local  
LEFT JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked  
ON local.name = linked.name ;  
GO  

这里的 [SRVR002\ACCTG] 是数据库的名称,如果您已经创建了 DBlink,这应该可以工作

【讨论】:

以上是关于从同一个表但不同的数据库中获取一列连接的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 插入一个表减去另一个表但同时插入另一列

SQL 尝试外部连接表但不工作

如何在sql中选择2个表但不重复?

显示2个不同实体表的数据表需要从数据库表中获取另一列值

MS Access - 基于同一张表但不同记录的表单和子表单

如何将来自不同表但相同数据库mysqli php的2列相乘[关闭]