28

原始查询:

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 兼容的查询之前,我没有处理过“FULL”标准吗?

4

5 回答 5

35

假设 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 的其他字段。

编辑:

在此处查看类似的方法。

它建议更详细但更高效

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不为空。

于 2013-10-27T06:11:45.140 回答
11

更高效更快的代码:

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
于 2016-03-03T09:39:50.017 回答
1

I found that if the field names are the same in both tables they will need to be listed individually rather than using the * operator. Also, the second SELECT statement needs to reference the other table. Simply using the same SQL as the first and changing it to a RIGHT JOIN does not allow the inclusion of the rows in the BB table.

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;
于 2017-07-20T21:13:17.107 回答
0

或者...您可以在您需要的字段上创建一个包含唯一记录的查询:

SELECT DISTINCT AA.C_ID
FROM AA
UNION
SELECT DISTINCT BB.C_ID
FROM BB;

通过该查询,您可以对“C_ID”上的两个表进行左连接

于 2021-02-05T20:54:47.440 回答
0

在 MS Access(或任何标准 SQL 语言)中可以通过这种方式实现完全/外部连接:

SELECT t1.* , t2.* 
FROM (SELECT table01.* , 1 AS [_x1] FROM table01) t1 
INNER JOIN 
(SELECT table02.* , 1 AS [_x2] FROM table02) t2 
ON t1.[_x1] = t2.[_x2];

唯一可能成为问题的是 [_x] 列中的两列。如果用户指定了他们想要的列(将 t1.* 和/或 t2.* 替换为 t1.[ColumnName11], t1.[ColumnName12],..., t2.[ColumnName21], t2 .[ColumnName22],...等...

于 2021-12-15T19:03:49.387 回答