0

私はこの問題に数日間苦労してきましたが、解決策を思い付くことができず、どこが間違っているのかわかりません.

いくつかの異なるテーブルで見つかった情報を表示する必要があるため、いくつかの結合を持つ SQL でクエリを作成しようとしています。

私の問題は結合にあります。最も単純な結合を行うたびに、クエリは何も返しません。以下は、私が試したものの2つの例です。うまくいけば、構文に何かが欠けているだけです。

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/スプリングウッド/スプリングウッド//2013 年 2 月 3 日 12:58:23:800AM///0/0/ 451/30163071/8387/ローガンホルム/ローガンホルム//2013 年 2 月 3 日 01:23:45:263AM/ //1200/4250/ 451/30163856/8387/シャイラー パーク/シャイラー パーク//2013 年 2 月 3 日 01:45:50:450AM///0/0/ 451/30163965/8387/ローガンホルム/ランコーン//2013 年 2 月 3 日01:48:31:200AM///2950/16050/ 451/30164712/8387/エイト マイル プレインズ/エイト マイル プレインズ//2013 年 2 月 3 日 02:09:33:017AM///2450/5750/ 451/30165778/ 8387/スプリングウッド/スプリングウッド//2013 年 2 月 3 日 02:44:51:363AM///800/2100/ 451/30166370/8387/ローガンホルム/ローガンホルム//2013 年 2 月 3 日 03:06:28:103AM///0/ 0/ 451/30166916/8387/シャイラー パーク/ //2013 年 2 月 3 日 03:28:46:553AM///0/13950/ 451/30169626/11979/ローガン セントラル/ //2013 年 2 月 3 日 07:18:05: 633AM///0/0/ 451/30169632/11979/ローガン セントラル/ローガン セントラル//2013 年 2 月 3 日 07:18:33:午前 120 時///0/0/ 451/30169783/11979/ウッドリッジ/スプリングウッド//2013 年 2 月 3 日 07:38:32:377AM///1250/6400/ 451/30170203/11979/ローガン セントラル/ //2013 年 2 月 3 日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 . "/";

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

結合を含むクエリを実行しようとすると、結果が得られません...

これは何も返しません:

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

これは、VehicleJobHistory テーブルから bookingID と DriverID の配列を返します。

$STH = $DBH->query("Select BookingID, DriverID FROM dbo.VehicleJobHistory WHERE TimeJobRequired > "02/03/2013" AND VehicleID = $VehicleID");

私は思い付くことができる他のすべての組み合わせを事実上試しましたが、クエリに結合を追加するとすぐに、何も機能しないようです。

誰かがこの問題の経験があるか、正しい方向に私を向けることができれば、私は最も感謝しています.

前もって感謝します!

4

1 に答える 1

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
于 2013-04-04T01:32:44.173 に答える