Sqlite中如何让一个table优先

How to give priority to one table in Sqlite

我有两张桌子。在这些表中,我的站点 ID 可能在其中一个或两个表中。如果我的停止 ID 在 B 中不存在,它应该从 A 中选择。如果它在 A 中不存在,它应该从 B 中选择。如果两个表中都存在停止 ID,那么我想优先考虑 B 并从中检索行B. 下面总是查询 returns 来自 B 的值。你能帮我解决这个问题吗?

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});

在您的 UNION ALL 中,您应该将 WHERE 子句应用于两个 SELECT;您当前的代码仅将条件应用于 B 侧,而 A 侧 returns 所有行。不过,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