如何重用UNION表?

时间:2015-07-11 17:34:43

标签: sqlite

我正在尝试在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表的查询?

1 个答案:

答案 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;