2015-04-04 46 views
1

我有兩個表格。在這些表格中,我的停止ID可能在其中一個或兩個中。如果我的停止ID不存在於B中,它應該從A中選擇。如果它不存在於A中,它應該從B中選擇。如果在兩個表中都存在stop ID,那麼我想給B優先並從中檢索行B.下面的查詢總是返回B的值。你能幫我解決這個問題嗎?如何在Sqlite中優先考慮一個表格

String selectQuery = "SELECT " 
    + stop_id + "," 
    + name + "," 
    + latitude + "," 
    + longitude + "," 

    +"1 as "+priority 
    +" FROM "+ A 

    +" UNION SELECT " 
    + stop_id + "," 
    + name + "," 
    + latitude + "," 
    + longitude + "," 
    +"2 as "+priority 
    +" FROM "+ B 
    +" WHERE " + stop_id + " =? " 
    +" ORDER BY "+priority 
    +" LIMIT 1 "; 


    Cursor cursor = db.rawQuery(selectQuery, new String[] {id}); 

回答

1

在你UNION ALL你應該WHERE條款同時適用於SELECT秒;您當前的代碼僅將條件應用於B一側,而A一方返回所有行。儘管如此,在末尾LIMIT 1隱藏了這個問題。

字符串連接不會使它容易看到,但你應該通過id兩次,並在查詢中使用兩個?佔位符:

SELECT stop_id, name, latitude, longitude, 1 as priority 
FROM A 
WHERE stop_id = ? 
UNION ALL 
SELECT stop_id, name, latitude, longitude, 2 as priority 
FROM B 
WHERE stop_id = ? 
ORDER BY priority DESC 
LIMIT 1 
+0

我想通了這一點,並跑來告訴這一點,但謝謝爲你的答案。 =) – 2015-04-04 11:27:24