我有两个数据库,为了方便起见,我们称它们为db1和db2。它们的结构完全相同,并且都有一个名为table1的表,其中都有id和value1字段。
我的问题是如何查询选择连接到相同id的两个表的value1字段?
您可以在表名前加上数据库名称来标识两个同名的表。然后,您可以使用完全限定的表名来引用同名字段。
因此,不使用别名:
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
这是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
在SQL中有一种简单的方法。扩展您的FROM子句语法,因此不要使用select ... from tablename,而是使用
select ... from database.namespace.tablename
默认命名空间为dbo。
您可以使用联合查询:
简单示例:
select "one" union select "two";
这将返回2行,第一行包含one
,第二行包含two
。它就像您连接2个SQL查询一样,唯一的常量是它们都必须返回相同数量的列。
多个数据库:
select * from client_db.users where id=1 union select * from master_db.users where id=1;
在这种情况下,用户数据库中的列数必须相同。您说它们具有相同的结构,所以不应该有问题。
尝试类似这样的东西。
$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 ....";
等等。 如果这不能帮助你,很抱歉。