原始查询:
SELECT *
FROM AA
FULL OUTERJOIN BB on (AA.C_ID = BB.C_ID);
如何转换上述查询以使其与Microsoft Access兼容?
我假设:
SELECT *
FROM AA
FULL LEFT JOIN BB ON (AA.C_ID = BB.C_ID);
我之前没有处理过“完整”条件,我是否正确地将第一个查询转换为与Access兼容的查询?
发布于 2013-10-27 14:11:45
假设在AA和BB中没有重复的行(即所有相同的值),一个完整的外连接等同于一个左连接和一个右连接的联合。
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。
它建议更冗长,但性能更好。
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_ID
和BB.C_ID
不为空。
发布于 2016-03-03 17:39:50
代码效率越高,速度越快:
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
发布于 2017-07-21 05:13:17
我发现,如果两个表中的字段名称相同,则需要单独列出它们,而不是使用*运算符。另外,第二个SELECT语句需要引用另一个表。简单地使用与第一个相同的SQL并将其更改为RIGHT JOIN不允许在BB表中包含行。
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;
https://stackoverflow.com/questions/19615177
复制相似问题