我在同一台服务器上有两个不同数据库的表。 我想输出差异。
Database 1: dbo.employees
Table: employees
id name
--- ----
1 John
2 Ringo
3 Paul
4 George
Database 2: dbo.timecard
Table: time
timeid timename
--- ----
1 John
2 Ringo
3 Paul
期望的输出:
resultid resultname
--- ----
4 George
我已设置连接信息:
<?PHP
$serverName = "server";
$UID = "dbuser";
$PWD = "dbpass";
$Database1 = "employees";
$Database2 = "timecard";
$connectionOptions1 = array("Database"=>$Database1, "UID"=>$UID, "PWD"=>$PWD);
$connectionOptions2 = array("Database"=>$Database2, "UID"=>$UID, "PWD"=>$PWD);
$conn1 = sqlsrv_connect( $serverName, $connectionOptions1);
$conn2 = sqlsrv_connect( $serverName, $connectionOptions2);
if( $conn === false )
var_dump(sqlsrv_errors());
?>
并创建了2个查询:
<?PHP
$EmployeeSelect = sqlsrv_query($conn1,"SELECT * FROM dbo.employees ORDER BY name");
WHILE ($EmployeeFetch=sqlsrv_fetch_array($EmployeeSelect, SQLSRV_FETCH_ASSOC)){
ECHO $EmployeeFetch['name']." / ".$EmployeeFetch['id'];
ECHO "<BR>";
}
?>
<?PHP
$TimeSelect = sqlsrv_query($conn2,"SELECT * FROM dbo.timecard ORDER BY timename");
WHILE ($TimeFetch=sqlsrv_fetch_array($TimeSelect, SQLSRV_FETCH_ASSOC)){
ECHO $TimeFetch['timename']." / ".$TimeFetch['timeid'];
ECHO "<BR>";
}
?>
如何在一个查询中处理2个不同的连接字符串?
答案 0 :(得分:1)
您不需要多个连接字符串,因为它们位于同一台服务器上。您的连接将具有任何默认数据库。让我们说你的第二个查询需要从默认的另一个数据库中提取数据。您只需要使用3部分命名。
作为旁注,您应始终明确命名列而不是使用*。
Select *
from MySecondDatabase.dbo.timecard
答案 1 :(得分:0)
我会将其作为单个SQL语句运行:
SELECT E.*
FROM db1.dbo.Employee E
LEFT OUTER JOIN db2.dbo.Time T
ON E.name = T.timename
WHERE T.timename IS NULL
答案 2 :(得分:0)
SELECT id,name FROM db1.dbo.Employee
EXCEPT
SELECT timeid,timename FROM db2.dbo.Time