【发布时间】:2018-10-21 12:13:38
【问题描述】:
Access / Jet 数据库引擎不支持FULL OUTER JOINs:
SELECT Table1.*, Table2.*
FROM Table1
FULL OUTER JOIN Table2 ON Table1.JoinField = Table2.JoinField
通常推荐的替代方法是UNIONLEFT 和RIGH JOINs 的结果;以下内容的一些变化:
SELECT Table1.*, Table2.*
FROM Table1
LEFT JOIN Table2 ON Table1.JoinField = Table2.JoinField
UNION ALL
SELECT Table1.*, Table2.*
FROM Table1
RIGHT JOIN Table2 ON Table1.JoinField = Table2.JoinField
WHERE Table1.JoinField IS NULL
但是,是否也可以使用交叉连接?
SELECT Table1.*, Table2.*
FROM Table1, Table2
WHERE Table1.JoinField = Table2.JoinField
OR Table1.JoinField IS NULL
OR Table2.JoinField IS NULL
以这种方式使用交叉连接有任何性能损失或其他缺点吗?
【问题讨论】:
-
我建议创建两个表,用虚拟数据填充它们,并将
full join结果与您的,替代结果进行比较。 -
@hvd 我觉得自己没有足够的能力创建具有足够相关的虚拟数据和结构的表来进行这样的实验。
-
我不认为 UNION 选项中的 where 子句是必要的......事实上,我觉得它可能会阻止你获得一些所需的结果......我错过了什么吗?
-
@IsaacReefman 如果使用
UNION ALL,那么INNER JOINed 记录会出现两次。一种替代方法是使用UNION,但前提是没有其他重复记录。 -
我相信所有的结果都是完全不同的。最后一个 sql 只会给你常见的行。第 2 个 sql 和第 1 个 sql 也会给出 dirr 结果。
标签: sql ms-access outer-join jet