【问题标题】:issue while using left join with full outer join将左连接与完全外连接一起使用时出现问题
【发布时间】: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" 但我猜有一些括号错误

标签: sql vba excel ms-access


【解决方案1】:

如果我知道了,您有 3 个表:A、B 和 C。 您想要 B 和 C 中不存在的表 A 的值。

这是一个离开:

SELECT  A.Role 
FROM A 
    LEFT JOIN ( SELECT B.Role 
                From B 
                UNION 
                SELECT C.Role 
                From C) D ON
        D.ROLE = A.ROLE
WHERE D.ROLE IS NULL

其他:

SELECT  A.Role 
FROM A 
WHERE A.ROLE NOT IN (   SELECT B.Role 
                        From B 
                        UNION 
                        SELECT C.Role 
                        From C)

还是:

SELECT  A.Role 
FROM A 
    LEFT JOIN B ON
        B.ROLE = A.ROLE
    LEFT JOIN c ON
        c.ROLE = A.ROLE
WHERE B.ROLE IS NULL and C.ROLE IS NULL

【讨论】:

  • 你是冠军兄弟。非常感谢
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 2019-02-26
  • 2014-09-23
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多