2015-07-11 37 views
1

我想重用SQLite中的表。我尝试如下:如何与UNION一起使用表格?

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

在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; 
+0

这正是我正在寻找!我希望我能给你更多的积分,因为你为我节省了很多头脑。这是一个耻辱StackOverflow的奖励系统有利于简单和简单的答案,而不是经过深思熟虑和涉及时间的答案:) –

相关问题