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是数据库名 数据库名和表名之间放两个点
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跨数据库查询两个表的方法,加急啊!!的主要内容,如果未能解决你的问题,请参考以下文章