Java 如何在Sqlite中为一个表赋予优先级
我有两张桌子。在这些表中,我的站点id可能在其中一个或两个表中。如果我的stop id在B中不存在,它应该从A中选取。如果它在A中不存在,它应该从B中选取。如果stop id在两个表中都存在,那么我想优先考虑B并从B中检索行。下面的查询总是从B中返回值。您能帮我解决这个问题吗Java 如何在Sqlite中为一个表赋予优先级,java,sqlite,union,Java,Sqlite,Union,我有两张桌子。在这些表中,我的站点id可能在其中一个或两个表中。如果我的stop id在B中不存在,它应该从A中选取。如果它在A中不存在,它应该从B中选取。如果stop id在两个表中都存在,那么我想优先考虑B并从B中检索行。下面的查询总是从B中返回值。您能帮我解决这个问题吗 String selectQuery = "SELECT " + stop_id + "," + name + "," + latitude + "," + longitude + ",
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
s;当前代码仅将条件应用于B
侧,而A
侧返回所有行<代码>限制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
我刚想出来,是来告诉你的,但谢谢你的回答。=)