2010-09-10 5 views

Répondre

3

Vous pouvez préfixer les noms de table avec le nom de base de données identifier les deux tables nommées de manière similaire. Vous pouvez ensuite utiliser ce nom de table complet pour faire référence aux champs nommés de la même manière.

Ainsi, sans alias:

select db1.table1.id, db1.table1.value1, db2.table1.value1 
from db1.table1 inner join db2.table1 on db1.table1.id = db2.table1.id 

et avec des alias

select t1.id, t1.value1, t2.value1 
from db1.table1 as t1 inner join db2.table1 as t2 on t1.id = t2.id 

Vous pouvez également créer un alias les colonnes sélectionnées de sorte que votre ligne de sélection devient:

select t1.id as id, t1.value1 as value_from_db1, t2.value1 as value_from_db2 
0

Essayez quelque chose comme ceci.

$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 ...."; 

etc. Désolé si cela ne suffit pas.

+0

lol, Oui ça n'aide pas beaucoup. Je sais que je pourrais probablement obtenir le résultat que je veux avec des scripts, mais j'espérais qu'il y aurait un moyen facile de simplement obtenir ce que je voulais avec une commande sql – Richard

0

Il y a un moyen facile en sql. Prolongez votre syntaxe pour clause FROM, donc au lieu d'utiliser select ... à partir tablename, utilisez

sélectionner ... de database.namespace.tablename

L'espace de noms par défaut est dbo.

+0

Oui, mais le problème qui se pose est que le domaine les noms sont les mêmes: S – Richard

+1

Vous pouvez préfixer les noms de champ avec le préfixe database.namespace.tablename approprié pour différencier deux noms de champ identiques.Alternativement vous pouvez alias les noms de tables pour différencier. – Shadwell

+0

@Shadwell, toute chance que vous pouvez donner un exemple ... Je reconnais que je suis encore un peu d'un newb quand il s'agit de sql – Richard

0

Vous pouvez utiliser une union select:

Exemple simple:

select "one" union select "two";

Ceci renvoie 2 lignes, la première ligne contient one et la 2ème ligne contient two. C'est comme si vous concateniez 2 cahiers sql, la seule constante est qu'ils doivent tous deux retourner le même nombre de colonnes.

bases de données multiples:

select * from client_db.users where id=1 union select * from master_db.users where id=1;

Dans ce cas, les deux bases de données utilisateurs doivent avoir le même nombre de colonnes. Vous avez dit qu'ils ont la même structure, donc vous ne devriez pas avoir de problème.

1

C'est T-Sql, mais je ne peux pas imaginer mysql serait très différent (supprimera réponse si ce n'est pas le cas)

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 
Questions connexes