我有两个数据库,为了参数起见,我们称它们为db1和db2。它们的结构完全相同,并且都有一个名为table1的表,它们都有字段id和value1。
我的问题是如何进行查询,为同一个id链接的两个表选择字段value1 ???
答案 0 :(得分:3)
您可以在表名前加上数据库名称,以标识两个名称相似的表。然后,您可以使用该完全限定的表名称来引用类似命名的字段。
所以,没有别名:
select db1.table1.id, db1.table1.value1, db2.table1.value1
from db1.table1 inner join db2.table1 on db1.table1.id = db2.table1.id
和别名
select t1.id, t1.value1, t2.value1
from db1.table1 as t1 inner join db2.table1 as t2 on t1.id = t2.id
您可能还想对所选列进行别名,以便选择行变为:
select t1.id as id, t1.value1 as value_from_db1, t2.value1 as value_from_db2
答案 1 :(得分:1)
这是T-Sql,但我无法想象mysql会有那么大的不同(如果不是这样的话会删除答案)
SELECT
a.Value1 AS [aValue]
,b.Value1 AS [bValue]
FROM
db1.dbo.Table1 a
INNER JOIN db2.dbo.Table1 b
ON a.Id = b.Id
答案 2 :(得分:0)
尝试此类内容。
$dbhost="server_name";
$dbuser1="user1";
$dbpass1="password1";
$dbname1="database_I";
$dbname2="database_II";
$db1=mssql_connect($dbhost,$dbuser1,$dbpass1);
mssql_select_db($dbname1,$db1);
$query="SELECT ... FROM database_I.table1, database_II.table2 WHERE ....";
等。很抱歉,如果这没有帮助。
答案 3 :(得分:0)
在sql中有一种简单的方法。扩展FROM子句的语法,因此不使用select ... from tablename,而是使用
从database.namespace.tablename
中选择....默认命名空间是dbo。
答案 4 :(得分:0)
您可以使用联合选择:
简单示例:
select "one" union select "two";
这将返回2行,第一行包含one
,第二行包含two
。就像你连接2个sql quires一样,唯一的常量是它们都必须返回相同数量的列。
多个数据库:
select * from client_db.users where id=1 union select * from master_db.users where id=1;
在这种情况下,两个用户数据库必须具有相同的列数。你说他们有相同的结构,所以你不应该有问题。