我正在尝试在SQLite中重用一个表。我的尝试如下:
SELECT
Partials.e_sentence
FROM
(SELECT
e_sentence, _id
FROM
Pair
JOIN PairCategories
ON
_id=PairId AND CategoryId=53
UNION
SELECT
e_sentence, _id
FROM
Pair
WHERE
e_sentence LIKE '%' || 'how often' || '%'
GROUP BY
e_sentence)
AS Parents JOIN Partials
ON Parents._id=ParentId
UNION
SELECT
e_sentence
FROM
Parents
我想要完成的关键部分是在底部,我尝试UNION在前一个语句中创建的表。有没有办法在SQLite中执行此操作,或者我是否被迫重复在UNION的前半部分中创建Parents表的查询?
答案 0 :(得分:1)
在SQLite 3.8.3或更高版本中,您可以使用common table expression:
WITH Parents AS (
SELECT e_sentence, _id
FROM Pair
JOIN PairCategories
...
)
SELECT Partials.e_sentence
FROM Parents
JOIN Partials ON Parents._id = ParentId
UNION
SELECT e_sentence
FROM Parents;
如果您使用较旧的SQLite(可能是因为您使用的是older Android),则可以为子查询创建view:
CREATE VIEW Parents AS
SELECT e_sentence, _id
FROM Pair
JOIN PairCategories
...;
SELECT Partials.e_sentence
FROM Parents
JOIN Partials ON Parents._id = ParentId
UNION
SELECT e_sentence
FROM Parents;
如果您不希望在数据库中永久保留此视图,则可以将其设置为临时(CREATE TEMPORARY VIEW ...
),以使其在当前数据库连接之外不可用,或者,作为最后的手段,您可以在您使用Parent
的任何地方插入子查询:
SELECT Partials.e_sentence
FROM (SELECT ...) AS Parents
JOIN Partials ON Parents._id = ParentId
UNION
SELECT e_sentence
FROM (SELECT ...) AS Parents;