PHP PDO - dblib MSSQL - SQL连接问题

时间:2013-04-03 22:33:08

标签: php sql sql-server pdo

我几天来一直在努力解决这个问题,我似乎无法找到解决方案,也无法看到我出错的地方。

我试图在sql中编写一个有几个连接的查询,因为我需要显示在几个不同的表中找到的信息。

我的问题在于连接,每当我做最简单的连接时,我的查询都不会返回任何内容。以下是我尝试过的两个例子。希望我只是遗漏了语法中的内容。

dbo.VehicleJobHistory:

VehicleID           Number
BookingID           Text
DriverID            Number
PickupSuburb        Text
DestinationSuburb   Text
ReasonDispatched    Text
TimeJobRequired     Date/Time
TimeCarAccepted     Date/Time
TimeCarPickup       Date/Time
TimeCarComplete     Date/Time
KmToPickup          Number
KmOfJob             Number
_timestamp          DateTime

来自dbo.VehicleJobHistory的示例日期:

$ STH = $ DBH-> query('SELECT * FROM dbo.VehicleJobHistory WHERE TimeJobRequired>“02/03/2013”​​AND VehicleID =“451”');

  

451/30162090/8387 / Springwood / Springwood // 2013年2月3日   12:58:23:800AM /// 0/0/451/30163071/8387 / Loganholme / Loganholme // 2月3日   2013 01:23:45:263AM /// 1200/4250/451/30163856/8387 / Shailer   Park / Shailer Park // 2013年2月3日01:45:50:450AM /// 0/0 /   451/30163965/8387 / Loganholme / Runcorn // 2013年2月3日   01:48:31:200AM /// 2950/16050/451/30164712/8387/八英里平原/八   Mile Plains // 2013年2月3日02:09:33:017AM /// 2450/5750 /   451 / 30165778/8387 / Springwood / Springwood // 2013年2月3日   02:44:51:363AM ///二千一分之八百/   451/30166370/8387 / Loganholme / Loganholme // 2013年2月3日   03:06:28:103AM /// 0/0/451/30166916/8387 / Shailer Park / 2013年2月3日   03:28:46:553AM /// 0/13950/451/30169626/11979 / Logan Central / // Feb 3   2013 07:18:05:633AM /// 0/0/451/30169632/11979 / Logan Central / Logan   中环// 2013年2月3日07:18:33:120 AM /// 0/0 /   451/30169783/11979 / Woodridge / Springwood // 2013年2月3日   07:38:32:377AM /// 1250/6400/451/30170203/11979 / Logan Central / // Feb 3   2013 08:31:52:960AM /// 0/1050 /

dbo.Vehicle:

VehicleID          Number 
CarNumber          Text 
PrimaryFleetID     Number 
Conditions         Text 
RegoNum            Text 
RegoExpiry         Date/Time 
TaxiLicNum         Number 
TaxiLicExpiry      Date/Time
VehicleMake        Text 
VehicleModel       Text 
VehicleYear        Text 
OwnerID            Number 
OperatorID         Number

来自dbo.vehicle的示例数据

$STH = $DBH->query('SELECT * FROM dbo.Vehicle WHERE  VehicleID = "451"');

echo $row->VehicleID  . "/"; 
echo $row->CarNumber  . "/"; 
echo $row->PrimaryFleetID . "/"; 
echo $row->Conditions . "/"; 
echo $row->OwnerID . "/"; 
echo $row->OperatorID . "/";

4分之451/120395399168分之5/ -1 / 3 /

当我尝试运行包含连接的任何查询时,我得不到结果......

这不会返回任何内容:

  

$ STH = $ DBH-> query(“SELECT dbo.VehicleJobHistory.BookingID,   dbo.VehicleJobHistory.DriverID来自dbo.Vehicle INNER JOIN   dbo.VehicleJobHistory ON dbo.Vehicle.VehicleID =   dbo.VehicleJobHistory.VehicleID WHERE TimeJobRequired> '09 / 03/2013'和   VehicleID = $ VehicleID“);

这将从VehicleJobHistory表返回一个bookingID和DriverID的数组:

  

$ STH = $ DBH->查询(“SELECT BookingID,DriverID FROM dbo.VehicleJobHistory WHERE TimeJobRequired>”02/03/2013“AND   VehicleID = $ VehicleID“);

我已经尝试了几乎所有其他组合我可以提出,但只要我在我的查询中添加一个连接,我似乎没有任何工作。

如果有人对这个问题有经验或者能指出我正确的方向,我会非常感激。

提前致谢!

1 个答案:

答案 0 :(得分:1)

SQL必须是左连接。

SELECT dbo.VehicleJobHistory.BookingID
    , dbo.VehicleJobHistory.DriverID
FROM dbo.Vehicle
LEFT JOIN dbo.VehicleJobHistory
    ON dbo.Vehicle.VehicleID = dbo.VehicleJobHistory.VehicleID
        AND dbo.VehicleJobHistory.TimeJobRequired > '09/03/2013'
WHERE dbo.Vehicle.VehicleID = $VEHICLEID