【发布时间】:2018-01-31 13:54:15
【问题描述】:
我有以下代码:
Dim rsD As ADODB.Recordset
Dim sqlD As String
Set rsD = New ADODB.Recordset
sqlD = "SELECT A.Role FROM A LEFT JOIN (SELECT
DISTINCT * FROM (SELECT B.Role From B LEFT JOIN
C ON(B.Role=C.Role)
UNION ALL SELECT C.Role From C LEFT JOIN B
ON(C.Role=B.Role)))
AS B ON (A.Role=B.Role) WHERE
(B.Role IS NULL)"
rsD.Open sqlD, conn, adOpenStatic
While Not rsD.EOF
wb.Worksheets(3).Range("A2").CopyFromRecordset rsD
Wend
rsD.Close
Set wb = Nothing
我想要做的:内部选择用于 FULL OUTER JOIN,因此它从表 B 和 C 中获取值并删除重复项。 然后外层选择在left join和NULL的帮助下过滤掉表A中存在但表B和C中不存在的值。
但我认为外部选择存在一些问题,因为没有正确的数据。
【问题讨论】:
-
这里可能有一种更直接的方法来删除重复项。表结构、样本数据和预期结果是什么?
-
举个例子: 表 A : ---------- 编号 1 2 3 表 B: ---------- 编号 1 表 C: -- -------- 2 号预期结果:3
-
也许这样做: SELECT A.Role FROM (A LEFT JOIN B ON (A.Role=B.Role) WHERE A.Role IS NULL) LEFT JOIN C ON (A.Role=C .Role) WHERE C.Role IS NULL" 但我猜有一些括号错误