sql跨数据库查询两个表的方法,加急啊!!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql跨数据库查询两个表的方法,加急啊!!相关的知识,希望对你有一定的参考价值。

用sql,数据库文件夹下面有两个子数据库
一个是A 一个是B
A中有个表table1,有个字段id1
B中有个表table2,也有字段id2
id1和id2有交叉数据

怎么写sql语句实现,我想用id1做为条件,去查询table2中有ID1字段的数据条、
将数据类型 varchar 转换为 numeric 时出错。

    列出两个表的数据

    select * from [AAA]..Table1 a inner join

    [BBB]..Table2 b on a.id1 = b.id2

    只BBB表里的数据

    Select * from [BBB]..Table2 b where b.id2

    in(Select a.id1 from [AAA]..Table1 a)

    AAA和BBB是数据库名   数据库名和表名之间放两个点

参考技术A 1.列出两个表的数据
select * from [AAA]..Table1 a inner join [BBB]..Table2 b on a.id1 = b.id2

2.只BBB表里的数据
Select * from [BBB]..Table2 b where b.id2 in(Select a.id1 from [AAA]..Table1 a)

AAA和BBB是数据库名 数据库名和表名之间放两个点本回答被提问者和网友采纳
参考技术B oracle可以用datalink,sqlsrver只能用两个sql分别查 参考技术C A和B数据库是本地数据库:
Select * from B.dbo.table2 T where T.id2 in(Select distinct ID1 from A.dbo.table1)
参考技术D select * from table2 where id2 in (select id1 from table1)

跨两个数据库导入/导出表的某些列并排除 mysql 中的重复电子邮件

【中文标题】跨两个数据库导入/导出表的某些列并排除 mysql 中的重复电子邮件【英文标题】:Import/Exporting certain columns of a table across two databases and excluding duplicate emails in mysql 【发布时间】:2015-05-14 05:09:39 【问题描述】:

我遇到了 mysql 查询的问题:

基本上,我有两个数据库,它们都包含一个名为 tblclients 的表,但是 db1 的记录比 db2 多得多,并且还有一些重复的记录(在两个数据库中都有电子邮件地址的用户将被排除在手术)。我打算将 db1 附加到 db2,只要找不到电子邮件地址,就只附加某些列。

我已经完成了这个 mysql,但它给了我一个错误。首先它抱怨没有选择数据库,即使我输入使用db1;在实际语句之前,它会产生另一个错误:

第 1 行出现错误 1064 (42000):您的 SQL 语法有错误;检查与您的MySQL 服务器版本相对应的手册,以在第 1 行的db1.tblclients (db1.tblclients.firstname, db1 附近使用正确的语法

对此有什么看法吗?

有人告诉我改用 mysqldump,但我相信它可以在 bash 脚本文件中使用的单行 mysql 查询中完成。

谢谢

INSERT INTO db1.tblclients 
            (db1.tblclients.firstname, 
             db1.tblclients.lastname, 
             db1.tblclients.companyname, 
             db1.tblclients.email, 
             db1.tblclients.address1, 
             db1.tblclients.address2, 
             db1.tblclients.city, 
             db1.tblclients.state, 
             db1.tblclients.postcode, 
             db1.tblclients.country, 
             db1.tblclients.phonenumber, 
             db1.tblclients.password, 
             db1.tblclients.authmodule, 
             db1.tblclients.authdata, 
             db1.tblclients.status, 
             db1.tblclients.pwresetkey, 
             db1.tblclients.pwresetexpiry, 
             db1.tblclients.emailoutput) 
VALUES      (SELECT db2.tblclients.firstname, 
                    db2.tblclients.lastname, 
                    db2.tblclients.companyname, 
                    db2.tblclients.email, 
                    db2.tblclients.address1, 
                    db2.tblclients.address2, 
                    db2.tblclients.city, 
                    db2.tblclients.state, 
                    db2.tblclients.postcode, 
                    db2.tblclients.country, 
                    db2.tblclients.phonenumber, 
                    db2.tblclients.password, 
                    db2.tblclients.authmodule, 
                    db2.tblclients.authdata, 
                    db2.tblclients.status, 
                    db2.tblclients.pwresetkey, 
                    db2.tblclients.pwresetexpiry, 
                    db2.tblclients.emailoutput 
             WHERE  NOT EXISTS (SELECT db2.tblclients.email 
                                WHERE  db2.tblclients.email = 
                                       db1.tblclients.email)); 

【问题讨论】:

【参考方案1】:

试试

insert into db1.tblclients 
(
  firstname, lastname, companyname,
  email, address1, address2, city, state,
  postcode, country, phonenumber, password,
  authmodule, authdata, status, pwresetkey, 
  pwresetexpiry, emailoutput
)
select 
  firstname, lastname, companyname,
  email, address1, address2, city, state,
  postcode, country, phonenumber, password,
  authmodule, authdata, status, pwresetkey, 
  pwresetexpiry, emailoutput 
  from db2.tblclients
 where not exists 
 (
   select 1
     from db1.tblclients   
    where email = db2.tblclients.email
 )

【讨论】:

最后一个 ) 是不必要的,所以你刚刚拯救了我的一天,谢谢!【参考方案2】:

我只是简单化了表结构,但想法必须足够清楚:

create table t1 (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  email VARCHAR(30),
  name VARCHAR(30));
create table t2 (
  id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
  email VARCHAR(30),
  name VARCHAR(30));

INSERT INTO t1 (email, name)
VALUES ('one@example.com', 'name1'), ('two@example.com', 'name2');

INSERT INTO t2 (email, name)
VALUES ('one@example.com', '2name1'), ('three@example.com', '2name3');

INSERT INTO t1 (email, name)
SELECT t2.email, t2.name from t2
  LEFT JOIN t1 on t1.email = t2.email where t1.id IS NULL;

SQLFiddle sample

【讨论】:

你能推荐一些通用的吗?我不想使用 one@example.com,因为记录太多 什么意思?哪里的记录太多了?这是一个简单的示例:从 table2 中排除一些存在于 table1 中的记录,左连接 table2 并通过与 NULL 比较来过滤它。使用这种方法的例子很多,这里有一个***.com/a/4560613/4786219

以上是关于sql跨数据库查询两个表的方法,加急啊!!的主要内容,如果未能解决你的问题,请参考以下文章

mysql联表查询出现重复数据怎么解决

查询表中数据的两种方法(select查)

如何对比两个相同数据库表的不同

如何将一个表的查询结果插入到另一个表中?

SQL关联两张表查数据,结果只显示一条。

Oracle数据库怎样跨库查询?