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
我有两张桌子。在这些表中,我的站点 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