2016-01-28 65 views
1

讓我們想象我在MySQL中有兩個表,一個叫做Vehicle,另一個叫Passenger。如何限制來自SQL子查詢或加入的結果

如果我想所有車輛和乘客的完整列表,然後我就可以做這樣的事情:

SELECT * 
    FROM Vehicle v 
    LEFT 
    JOIN Passenger p 
    ON p.VehicleID = v.VehicleID 
LIMIT 0,100 

這裏的問題是讓想象,我的車是公交車,和第一有50名乘客,第二輛公共汽車有40輛,第三輛有30輛。上述查詢的限制100將給我第三輛公共汽車上的部分乘客清單。

有沒有辦法創建這樣的查詢,不會拆分連接表的結果?

或者,您可以將LIMITS分別應用於不同的表格嗎?所以我可以說我想每輛車限制10輛車,限制50名乘客?

邏輯上是這樣的:

SELECT * FROM Vehicle (LEFT JOIN Passenger ON Passenger.VehicleID = Vehicle.VehicleID LIMIT 0,50) LIMIT 0, 10 

我想知道,這可能會使用某種子查詢的實現?可能是這樣的:

SELECT *, (SELECT * FROM Passenger WHERE Passenger.VehicleID = Vehicle.VehicleID LIMIT 0,50) FROM Vehicle LIMIT 0, 10 

但是這不起作用(子查詢只允許返回一行)。

在此先感謝。

+0

JOIN你的子查詢 – Mihai

回答

0

在MySQL中,做你想要使用變量枚舉行什麼最簡單的方法:

SELECT * 
FROM (SELECT v.*, (@rnv := @rnv + 1) as seqnum_v 
     FROM Vehicle v CROSS JOIN 
      (SELECT @rnv := 0) params 
    ) v LEFT JOIN 
    (SELECT p.*, 
      (@rnp := if(@v = VehicleId, @rnp + 1, 
         if(@v := VehicleId, 1, 1) 
         ) 
      ) as seqnum_p 
     FROM Passenger p CROSS JOIN 
      (SELECT @v := -1, @rnp := 0) params 
    ) p 
    ON p.VehicleID = v.VehicleID 
WHERE seqnum_v <= 10 and seqnum_p <= 50;