2015-09-27 37 views
0

我將兩個表'device'和'unit'連接在一起。設備定義了設備的類型,單元是指向設備表中的一行的唯一設備,定義了它的類型。獲取表B中參考表B的行數

我現在正在尋找一種解決方案,以從'設備'中選擇​​每種設備類型並計算指向此設備的單位數量。我在我目前的解決方案面臨的問題,

SQL

SELECT device.*, COUNT(unit.id) 
FROM device LEFT JOIN unit ON device.id = unit.device_id GROUPBY device.id 

斯卡拉油滑

def devicesWithUnitCount = for { 
    (device, unit) <- TableQuery[TDDevice] joinLeft TableQuery[TDUnit] 
              on (_.id === _.deviceID) 
              groupBy (_._1) 
} yield (device, unit.size) 

是我得到的至少1計數結果,即使沒有指向設備類型的單位。

如何在SQL中實現這種計數,或者最好是Slick?

+0

使用deviceid而不是設備。*? –

+0

這將如何解決計數問題? – th3falc0n

+0

想象你會得到一個值爲1,2,someval1,someval2,null的行..其中1是deviceid。這仍然會導致計數爲1 –

回答

1

你的SQL對於你想要做的是正確的。油滑可能是產生這樣的查詢:

SELECT device.*, COUNT(device.id) 
-----------------------^ 
FROM device LEFT JOIN 
    unit 
    ON device.id = unit.device_id 
GROUP BY device.id; 

也許有一種方式來獲得它來計算device_id,這是unamibiguously從unit

+0

我沒有甚至注意到我使用的SQL語句已經做了它應該做的事情,因爲我認爲我的Slick實現是正確的。感謝提示。 – th3falc0n

相關問題