2013-04-14 27 views
0

我正在開發一個phonegap應用程序 - 計算誰欠誰喝。我認爲我接近一個解決方案,但不能解決沒有外連接的最後一部分(SQL Lite不支持)。從同一表中減去淨位置的SQL查詢

該數據庫的結構爲代表買方和接收方的用戶ID,以及單獨的飲料類型(啤酒,葡萄酒,雞尾酒等)。我想要通過並取消相同類型的飲料來確定每種類型中的誰是前方。

結果應與每次喝代碼往下方的表,並且欠下數(可能爲負)

var sql = "select too.drinkType, ifnull(fro.cnt, 0) - ifnull(too.cnt, 0) as cnt FROM "+ 
"(SELECT drinkType, count(drinkType) as Cnt FROM drink "+ 
"WHERE boughtBy = "+0+" and boughtFor = " + id + " GROUP BY drinkType) too "+ 
" LEFT OUTER JOIN " + 
"(SELECT drinkType, count(drinkType) as Cnt FROM drink "+ 
"WHERE boughtBy = "+id+" and boughtFor = " + 0 + " GROUP BY drinkType) fro "+ 
"on too.drinkType = fro.drinkType " 

tx.executeSql(sql, [], getDrinksNet_success); 

這幾乎工程,但遺漏了只由第二查詢返回drinkTypes(來回)。我認爲我需要一個外連接,但phonegap似乎不支持這一點。有沒有辦法解決它?

回答

0

嘗試使用這樣的查詢,在那裏你向上或向下計數取決於誰買了飲料:

SELECT drinkType, SUM(CASE WHEN boughtBy = :id THEN 1 ELSE -1 END) AS cnt 
FROM drink 
WHERE (boughtBy = :id AND boughtFor = 0) 
OR (boughtFor = :id AND boughtBy = 0) 
GROUP BY drinkType 
0

在一般情況下,你可以實現一個FULL OUTER JOIN通過combining左和右外連接,並通過使用LEFT OUTER JOIN並交換這兩個表來實施RIGHT OUTER JOIN。 您的查詢會看起來像這樣:

SELECT ... FROM 
(SELECT ...) too 
LEFT OUTER JOIN 
(SELECT ...) fro 
ON too.drinkType = fro.drinkType 
UNION 
SELECT ... FROM 
(SELECT ...) fro 
LEFT OUTER JOIN 
(SELECT ...) too 
ON fro.drinkType = too.drinkType