如何从具有相同表和字段名称的不同数据库中选择字段

时间:2010-09-10 15:37:26

标签: sql mysql

我有两个数据库,为了参数起见,我们称它们为db1和db2。它们的结构完全相同,并且都有一个名为table1的表,它们都有字段id和value1。

我的问题是如何进行查询,为同一个id链接的两个表选择字段value1 ???

5 个答案:

答案 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;

在这种情况下,两个用户数据库必须具有相同的列数。你说他们有相同的结构,所以你不应该有问题。