【问题标题】:SQL where with Union and LeftSQL where 与 Union 和 Left
【发布时间】:2018-04-13 10:30:58
【问题描述】:

是否可以在 Left Join 的 [ID] 中而不是在 [TypeID] 中添加条件?

 SQL = "SELECT " & _
          "ADate As NewDate, " & _
          "tblA.TypeID as ID, " & _
          "tblAB.TypeControl as ControlID " & _
          "FROM tblA " & _
               "LEFT OUTER JOIN tblAB " & _
               "ON tblAB.TypeID = tblA.TypeID " & _
               "WHERE tblA.TypeID = " & Counter & " " & _     => Delete this one.
       "UNION ALL SELECT " & _
          "BDate As NewDate, " & _
          "tblB.TypeID as ID, " & _
          "tblAB.TypeControl as ControlID " & _
          "FROM tblB " & _
               "LEFT OUTER JOIN tblAB " & _
               "ON tblAB.TypeID = tblB.TypeID " & _
               "WHERE tblB.TypeID = " & Counter & " " & _     => Delete this one.
       ===
       and place one WHERE on ID here
       "WHERE ID = " & Counter & " " & _    => Like this one. But I am getting an error.
       ===
       "ORDER BY NewDate;"

从 tblA 和 tblB 中删除两个 WHERE。 最后在ID中添加一个。 并创建这个。

 SQL = "SELECT " & _
          "ADate As NewDate, " & _
          "tblA.TypeID as ID, " & _
          "tblAB.TypeControl as ControlID " & _
          "FROM tblA " & _
               "LEFT OUTER JOIN tblAB " & _
               "ON tblAB.TypeID = tblA.TypeID " & _
       "UNION ALL SELECT " & _
          "BDate As NewDate, " & _
          "tblB.TypeID as ID, " & _
          "tblAB.TypeControl as ControlID " & _
          "FROM tblB " & _
               "LEFT OUTER JOIN tblAB " & _
               "ON tblAB.TypeID = tblB.TypeID " & _
               "WHERE tblB.TypeID = " & Counter & " " & _
       "WHERE ID = " & Counter & " " & _
       "ORDER BY NewDate;"

提前谢谢你。

【问题讨论】:

  • 呃……你到底是什么意思?您想在联接中使用字段别名吗?因为这是不可能的,除非你使用子查询,而且你不应该仅仅为了创建别名而使用子查询。
  • 现在我在 [TypeID] 中有两个 WHERE 条件,分别在 tblA 和 tblB 上。我想在 [ID] 上创建一个 WHERE 条件。我更新了我的帖子。
  • 请编辑您的问题并显示格式整齐的 SQL 查询,而不是代码版本。然后显示样本数据和预期输出。

标签: sql ms-access criteria


【解决方案1】:

可以通过将整个查询包装在子查询中来仅检查一次 ID,然后在外部查询中检查 ID,例如:

SELECT * FROM (
    SELECT " & _
      "ADate As NewDate, " & _
      "tblA.TypeID as ID, " & _
      "tblAB.TypeControl as ControlID " & _
      "FROM tblA " & _
           "LEFT OUTER JOIN tblAB " & _
           "ON tblAB.TypeID = tblA.TypeID " & _
    "UNION ALL SELECT " & _
      "BDate As NewDate, " & _
      "tblB.TypeID as ID, " & _
      "tblAB.TypeControl as ControlID " & _
      "FROM tblB " & _
           "LEFT OUTER JOIN tblAB " & _
           "ON tblAB.TypeID = tblB.TypeID "
) WHERE ID =  " & Counter & "

但是,根据数据库引擎对此的优化方式,可能需要更长的时间来执行。我建议您不要这样做,并按原样保留您的查询。

(另外,我把引号留给你,因为你的问题不应该有这些)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    相关资源
    最近更新 更多