当前位置:  开发笔记 > 数据库 > 正文

与SQLite完全合作

如何解决《与SQLite完全合作》经验,为你挑选了2个好方法。

SQLite只有INNER和LEFT JOIN.

有没有办法与SQLite进行完全外连接?



1> Mark Byers..:

是的,请参阅Wikipedia上的示例.

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


如果使用UNION ALL,则两个选择中的一个选择排除"内连接"行(例如显示的WHERE条件)至关重要.或者,您可以使用普通UNION并使其重复消除,避免重复"内部联接"行.
@GrahamBorland:我的回答中的代码来自维基百科.我认为维基百科自我发布以来就已被编辑过.不同之处在于它们使用内连接和两个选择来获取不匹配的记录(每个表一个).我的答案中的查询将内连接和其中一个选择组合成左连接.与(A + B)+(C)相比,它是(A)+(B)+(C).

2> Adil Hussain..:

在乔纳森·莱夫勒(Jonathan Leffler)评论之后,这是马克·拜尔斯(Mark Byers)的另一种答案:

SELECT * FROM table_name_1 LEFT OUTER JOIN table_name_2 ON id_1 = id_2
UNION
SELECT * FROM table_name_2 LEFT OUTER JOIN table_name_1 ON id_1 = id_2

请参阅此处以获取原始源代码和其他SQLite示例。


我认为WHERE employee.DepartmentID IS NULL是必须的,尽管您不介意获取重复行
UNION(_without_ ALL)删除重复的行
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有