什么是android中正确的sql UNION?

时间:2012-02-02 08:01:56

标签: java android sql sqlite

(SELECT word, description 
FROM dictionary
WHERE word LIKE 'xxxx%') AS a

UNION

(SELECT word, description
FROM dictionary
WHERE word LIKE '%xxxx%' AND word NOT IN a.word)

注意:“xxxxx”是关键字。

我在Android上使用字典应用程序搜索关键字。 要求是将那些以关键字开头的结果放在最上面。 我想出了sql联合的想法,但我不是SQL专家,所以有人可以帮我弄清楚我上面的查询做错了什么。

仅供参考:我正在使用rawQuery()来处理原始SQL语句。

感谢社区。

1 个答案:

答案 0 :(得分:4)

无法保证UNION运算符将按您假设的顺序从两个子查询中排序行。 UNION ALL并不试图找到重复项,因此它有更多工作机会(正如您所希望的那样)。

所以这可行(或者可能不会!) - 取决于UNION ALL内部如何运作:

(SELECT word, description 
FROM dictionary
WHERE word LIKE 'xxxx%') AS a

UNION ALL

(SELECT word, description
FROM dictionary
WHERE word LIKE '%_xxxx%') AS b

最好用ORDER BY明确指定订单。我认为SQLite支持这个:

SELECT word, description
FROM dictionary
WHERE word LIKE '%xxxx%'
ORDER BY (word LIKE 'xxxx%') DESC