从同一服务器上的两个数据库 db1 和 db2 中获取唯一数据

Posted

技术标签:

【中文标题】从同一服务器上的两个数据库 db1 和 db2 中获取唯一数据【英文标题】:Bring Unique data from two database db1 and db2 on same server 【发布时间】:2018-07-19 05:00:52 【问题描述】:

我在同一台服务器上有两个数据库名称 db1 和 db2,我需要一个 sql 查询来获取唯一数据。下面是数据库和表名

db1

Table_db1

EmailID           Name     Mobile
raj@gmail.com     raj      7207542655
kumar@gmail.com   kumar    111111111

db2

Table_db2

 EmailID          Name     Mobile
raj@gmail.com     raj      7207542655
rohan@gmail.com   rohan    5555555555

raj@gmail.com 从表中删除了重复项,输出应该是

raj@gmail.com     raj      7207542655
kumar@gmail.com   kumar    111111111
rohan@gmail.com   rohan    5555555555

我需要基于 Table_db1 和 Table_db2 的 EmailID 来自 db1 和 db2 的唯一数据

从 Table_db1 和 Table_db2 中获取单个 EmailID 数据

【问题讨论】:

堆栈中的任何一个溢出。@all 一些数据和预期输出可能有助于完全理解问题。 输出将相同的列 EmailID 名称移动。 @苏桑 我更新了我的问题。 @苏桑 嗨,mazhar,两个表中的姓名和手机号码也相同? 【参考方案1】:

你可以试试这个

 SELECT distinct te1.Emailid, (select top 1 [name] from [db1].dbo._Table_1 as te11 where te11.emailid = te1.emailid) as [Name]
  FROM [db1].dbo._Table_1 as te1
 WHERE EXISTS  (
               SELECT emailId 
                 FROM [db2].dbo._Table_1 as te2
                WHERE te1.emailid = te2.emailid
              )  

UNION

SELECT distinct te1.Emailid, (select top 1 [name] from [db1].dbo._Table_1 as te11 where te11.emailid = te1.emailid) as [Name]
  FROM [db1].dbo._Table_1 as te1
 WHERE not EXISTS  (
               SELECT emailId 
                 FROM [db2].dbo._Table_1 as te2
                WHERE te1.emailid = te2.emailid
              )  


UNION

SELECT distinct te2.Emailid, (select top 1 [name] from [db2].dbo._Table_1 as te22 where te22.emailid = te2.emailid) as [Name]
  FROM [db2].dbo._Table_1 as te2
 WHERE not EXISTS  (
               SELECT emailId 
                 FROM  [db1].dbo._Table_1 as te1
                WHERE te1.emailid = te2.emailid
              )  

【讨论】:

我正在尝试这个:从 IntranetNew_Live.dbo.Table_CandidateMaster 中选择 a.*,b.* 作为 --DB1= 第一个数据库名称,dbo=schema(固定不变),tbl1=table from第一个数据库,a= 整个路径的别名 (DB1.dbo.tbl1) left join Intranet_NewVersion.dbo.Table_CandidateMaster as b --DB2= 第二个数据库名称,dbo=schema(固定不变),tbl2=来自第二个数据库的表,b = a.EMail=b.EMail .@Pradip Meghapra 上的整个路径 (DB2.dbo.tbl2) 的别名 我会检查你的查询会通知你。 @Pradip Meghapra【参考方案2】:

您的行完全相同。只需使用union

select EmailID, Name, Mobile
from Table_db1
union -- on purpose to remove duplicates
select EmailID, Name, Mobile
from Table_db2;

如果其他列可以不同并且表中没有重复,则:

select EmailID, Name, Mobile
from Table_db1
union all
select EmailID, Name, Mobile
from Table_db2 t2
where not exists (select 1 from Table_db1 t1 where t1.EmailID = t2.EmailID);

【讨论】:

以上是关于从同一服务器上的两个数据库 db1 和 db2 中获取唯一数据的主要内容,如果未能解决你的问题,请参考以下文章

SQL创建用户登录不能从一个数据库为另一个数据库工作

如何在 SQL Server 中同时连接两个数据库?

数据库项目:数据库引用不起作用

将 mySql 数据库表复制到另一个具有不同表结构的数据库表

如何迁移使用主键和自动增量值 SQL 2008 R2 的两个数据库

C# 如何实现sqlserver 2008中两个数据库中两张表的关联查询。 如: sleect * from db1.tab1,db2.tab2;