2013-12-08 39 views
1

此查询有什么问题? 这些都是我很using-sql server内部连接查询未执行

create table PS3_Vehicle 
(
    ID int IDENTITY(1,1) NOT NULL Primary Key, 
    DealerID varchar(255) NOT NULL, 
    VehicleID varchar(255) UNIQUE NOT NULL, 
    VehicleName varchar(255) NOT NULL, 
    Capacity BIGINT NOT NULL  
); 

create table PS3_VehicleBooking 
(
    ID int IDENTITY(1,1) NOT NULL Primary Key, 
    BookingID varchar(255) NOT NULL UNIQUE, 
    VehicleID varchar(255) NOT NULL, 
    StartDate date NOT NULL, 
    EndDate date NOT NULL 
); 

CREATE TABLE PS3_Dealer(
    ID int IDENTITY(1,1) NOT NULL Primary KEY, 
    DealerID varchar(255) NULL, 
    DealerName varchar(255) NOT NULL, 
    ContactNo varchar(255) NOT NULL, 
    NoOfVehicles bigint NOT NULL, 
    CommittedDate date NOT NULL 
); 

SELECT DealerID, PS3_Vehicle.VehicleID, VehicleName, StartDate, EndDate 
FROM PS3_Vehicle 
INNER JOIN PS3_VehicleBooking ON PS3_Vehicle.VehicleID != PS3_VehicleBooking.VehicleID AS W 
INNER JOIN PS3_Dealer ON W.DealerID = PS3_Dealer.DealerID 
    AND CommittedDate > GETDATE(); 
+0

你想要的输出是什么? –

+0

在你的第一个内部连接中,你有!=在你的“ON”子句中?还有在Select语句中DealerID的列名歧义,因为此列存在于具有相同名称的多个表中 –

+0

10那些不存在于车辆表中的dealerid的车辆id,但是我希望在结果开始日期和结束日期列中也包含没有 – user3054094

回答

0

尝试表这样的:

SELECT w.DealerID, w.VehicleID, w.VehicleName, b.StartDate, b.EndDate 
FROM PS3_Vehicle w 
INNER JOIN PS3_VehicleBooking b ON w.VehicleID != b.VehicleID 
INNER JOIN PS3_Dealer d ON W.DealerID = d.DealerID 
    AND CommittedDate > GETDATE(); 

http://sqlfiddle.com/#!3/8f5c0/6

1

我想你可以用一个简单的LEFT JOINPS3_VehiclePS3_VehicleBooking其中PS3_VehicleBooking之间没有比赛做对于该车辆:

SELECT v.DealerID, v.VehicleID, v.VehicleName, vb.StartDate, vb.EndDate 
FROM PS3_Vehicle v 
LEFT JOIN PS3_VehicleBooking vb ON v.VehicleID = vb.VehicleID 
WHERE vb.VehicleID IS NULL 

这会给你一个不存在于PS3_VehicleBooking车辆,这使得startDateendDate总是NULL

0
SELECT v.DealerID, v.PS3_Vehicle.VehicleID, v.VehicleName, b.StartDate, b.EndDate 
FROM PS3_Vehicle v 
Left JOIN PS3_VehicleBooking b ON v.VehicleID = b.VehicleID 
INNER JOIN PS3_Dealer d ON v.DealerID = d.DealerID 
Where b.VehicleID is null 
AND d.CommittedDate > GETDATE() 

会给你所有的未结算的车辆和Infor约谁没有处理这些经销商..

当你开始做这样的查询时,用别名或表名完全限定你的所有名字,让下一个开发者更容易。

哦,在这个查询中,startdate和enddate总是为空,所以毫无意义。

0
SELECT D.DealerID, V.VehicleID, V.VehicleName, vb.StartDate, vb.EndDate 
FROM PS3_Dealer D LEFT JOIN PS3_Vehicle V 
ON D.DealerID = V.DealerID 
LEFT JOIN PS3_VehicleBooking vb 
ON V.VehicleID = VB.V.VehicleID 
WHERE vb.V.VehicleID IS NULL 
AND CommittedDate > GETDATE();