首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在access中编写完整的外部联接查询

如何在access中编写完整的外部联接查询
EN

Stack Overflow用户
提问于 2013-10-27 14:07:19
回答 5查看 87.6K关注 0票数 26

原始查询:

代码语言:javascript
复制
SELECT * 
FROM AA
FULL OUTERJOIN BB on (AA.C_ID = BB.C_ID);  

如何转换上述查询以使其与Microsoft Access兼容?

我假设:

代码语言:javascript
复制
SELECT *
FROM AA
FULL LEFT JOIN BB ON (AA.C_ID = BB.C_ID);

我之前没有处理过“完整”条件,我是否正确地将第一个查询转换为与Access兼容的查询?

EN

回答 5

Stack Overflow用户

发布于 2013-10-27 14:11:45

假设在AA和BB中没有重复的行(即所有相同的值),一个完整的外连接等同于一个左连接和一个右连接的联合。

代码语言:javascript
复制
SELECT *
    FROM AA
        LEFT JOIN BB ON AA.C_ID = BB.C_ID
UNION
SELECT *
    FROM AA
        RIGHT JOIN BB ON AA.C_ID = BB.C_ID

如果有重复的行(并且您希望保留它们),则在末尾添加WHERE AA.C_ID IS NULL,或者在AA没有相应记录的情况下添加其他仅为null的字段。

编辑:

请参阅类似的方法here

它建议更冗长,但性能更好。

代码语言:javascript
复制
SELECT *
    FROM AA
        JOIN BB ON AA.C_ID = BB.C_ID
UNION ALL
SELECT *
    FROM AA
        LEFT JOIN BB ON AA.C_ID = BB.C_ID
    WHERE BB.C_ID IS NULL
UNION ALL
SELECT *
    FROM AA
        RIGHT JOIN BB ON AA.C_ID = BB.C_ID
    WHERE AA.C_ID IS NULL

但是,这假设AA.C_IDBB.C_ID不为空。

票数 34
EN

Stack Overflow用户

发布于 2016-03-03 17:39:50

代码效率越高,速度越快:

代码语言:javascript
复制
SELECT *
    FROM AA
        LEFT JOIN BB ON AA.C_ID = BB.C_ID
UNION ALL
SELECT *
    FROM AA
        RIGHT JOIN BB ON AA.C_ID = BB.C_ID
    WHERE AA.C_ID IS NULL
票数 9
EN

Stack Overflow用户

发布于 2017-07-21 05:13:17

我发现,如果两个表中的字段名称相同,则需要单独列出它们,而不是使用*运算符。另外,第二个SELECT语句需要引用另一个表。简单地使用与第一个相同的SQL并将其更改为RIGHT JOIN不允许在BB表中包含行。

代码语言:javascript
复制
SELECT AA.C_ID
FROM AA
LEFT JOIN BB ON 
  AA.C_ID = BB.C_ID
UNION ALL 
SELECT BB.C_ID
FROM BB
LEFT JOIN AA ON 
  AA.C_ID = BB.C_ID
WHERE AA.C_ID IS NULL;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19615177

复制
相关文章

相似问题

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