首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >与SQLite的完全外部联接

与SQLite的完全外部联接
EN

Stack Overflow用户
提问于 2009-12-18 01:19:55
回答 2查看 46.7K关注 0票数 63

SQLite只有INNER和LEFT JOIN。

有没有一种方法可以用SQLite进行完全的外连接?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-12-18 01:27:56

可以,请参阅Wikipedia上的示例。

代码语言:javascript
复制
SELECT employee.*, department.*
FROM   employee 
       LEFT JOIN department 
          ON employee.DepartmentID = department.DepartmentID
UNION ALL
SELECT employee.*, department.*
FROM   department
       LEFT JOIN employee
          ON employee.DepartmentID = department.DepartmentID
WHERE  employee.DepartmentID IS NULL
票数 95
EN

Stack Overflow用户

发布于 2021-05-15 11:55:36

我将迟来提出我的2美分。考虑下面两个简单的表people1和people2:

代码语言:javascript
复制
   id   name age
0   1    teo  59
1   2   niko  57
2   3  maria  54 


    id   name weight
0   1    teo    186
1   2  maria    125
2   3    evi    108

首先,我们创建一个临时视图v_all,在这里我们使用UNION连接两个相对的左连接,如下所示:

代码语言:javascript
复制
CREATE TEMP VIEW v_all AS
              SELECT p1.name AS name1, p1.age,
                    p2.name AS name2, p2.weight
              FROM people1 p1
              LEFT JOIN people2 AS p2 
              USING (name)
              UNION
              SELECT p1.name AS name1, p1.age,
                  p2.name AS name2, p2.weight
              FROM people2 AS p2
              LEFT JOIN people1 AS p1
              USING (name);

但是,我们最终得到两个name列,name1和name2,它们可能具有空值或相等值。我们想要的是在单个列名中组合name1和name2。我们可以使用一个案例查询来实现这一点,如下所示:

代码语言:javascript
复制
SELECT age,weight,
                CASE
                  WHEN name1 IS NULL
                    THEN name2
                  WHEN name2 IS NULL
                    THEN name1
                  WHEN name1=name2
                    THEN name1
                END name
              FROM v_all

我们最终会得到:

代码语言:javascript
复制
      name weight   age
0    evi    108  None
1  maria    125    54
2   niko   None    57
3    teo    186    59

当然,您可以在一个查询中组合这两个查询,而不必创建临时视图。我避免这样做,是为了强调只有2个左连接和一个并集的不足,这是我到目前为止所看到的建议。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1923259

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档