【问题标题】:Build Dynamic SQL "FROM" statement构建动态 SQL“FROM”语句
【发布时间】:2016-01-09 01:14:01
【问题描述】:

我在 MS ACCESS 2013 中创建了一个动态 SQL 字符串构建器来为我的用户创建报告。这些报告基本上从用户可以使用表单控件更改的预设字段池中查询数据。我使用条件语句来构造 SELECTWHERE 语句没有问题,但是我一直在使用基于我的表关系的静态字符串来生成 FROM 语句。我已经开始收到 ambiguous external joins 错误,但是当我解决它时,我得到了重复的报告数据。我想知道是否可以根据用户从不同表中选择的字段动态构造 FROM 语句。

Table relationships I copied the FROM SQL from is shown here

这是我正在使用的静态 FROM 字符串,它给了我错误

FROM (((((((tbl_PROJECTS_PARENT LEFT JOIN tbl_PROJECTS_CHILD ON
tbl_PROJECTS_PARENT.WR_ID = tbl_PROJECTS_CHILD.WR_ID) LEFT JOIN 
tbl_PROJECTS_FACILITIES ON tbl_PROJECTS_PARENT.WR_ID = 
tbl_PROJECTS_FACILITIES.WR_ID) LEFT JOIN tbl_SPC_GFEBS_BLDG ON 
tbl_PROJECTS_FACILITIES.FACILITY_ID = tbl_SPC_GFEBS_BLDG.Building) LEFT 
JOIN tbl_CLEARANCE ON tbl_PROJECTS_PARENT.WR_ID = tbl_CLEARANCE.WR_ID) 
LEFT JOIN tbl_RMP ON tbl_PROJECTS_CHILD.ID_WBS = tbl_RMP.ID_WBS) LEFT JOIN 
tbl_RMP_FY ON tbl_PROJECTS_CHILD.ID_WBS = tbl_RMP_FY.ID_WBS) LEFT JOIN 
tbl_COMMENTS ON tbl_PROJECTS_PARENT.WR_ID = tbl_COMMENTS.WR_ID) RIGHT JOIN 
Qry_comments_latest_basic ON tbl_COMMENTS.WR_ID = 
Qry_comments_latest_basic.WR_ID

对于没有使用代码插入器,我深表歉意。无法让它显示整个区块。

【问题讨论】:

  • 您的问题不清楚。如果您的问题是“我想知道是否可以根据用户从不同表中选择的字段动态构造 FROM 语句。”当然可以。如果您对特定的“动态生成的查询”有错误,那么您应该发布整个查询以及确切的错误消息。

标签: sql ms-access vba


【解决方案1】:

您需要创建包含所有可用字段的查询,以将其作为新表显示和查询。

SELECT [user selected field 1], [user selected field 2], [user selected field 3]
FROM (
    SELECT *
    FROM tbl_PROJECTS_PARENT
    LEFT JOIN tbl_PROJECTS_CHILD ON tbl_PROJECTS_PARENT.WR_ID = tbl_PROJECTS_CHILD.WR_ID
    LEFT JOIN tbl_PROJECTS_FACILITIES ON tbl_PROJECTS_PARENT.WR_ID = tbl_PROJECTS_FACILITIES.WR_ID
    LEFT JOIN tbl_SPC_GFEBS_BLDG ON tbl_PROJECTS_FACILITIES.FACILITY_ID = tbl_SPC_GFEBS_BLDG.Building
    LEFT JOIN tbl_CLEARANCE ON tbl_PROJECTS_PARENT.WR_ID = tbl_CLEARANCE.WR_ID
    LEFT JOIN tbl_RMP ON tbl_PROJECTS_CHILD.ID_WBS = tbl_RMP.ID_WBS
    LEFT JOIN tbl_RMP_FY ON tbl_PROJECTS_CHILD.ID_WBS = tbl_RMP_FY.ID_WBS
    LEFT JOIN tbl_COMMENTS ON tbl_PROJECTS_PARENT.WR_ID = tbl_COMMENTS.WR_ID
    RIGHT JOIN Qry_comments_latest_basic ON tbl_COMMENTS.WR_ID = Qry_comments_latest_basic.WR_ID
) AS FullData

【讨论】:

  • 我遵循逻辑,但在尝试执行查询时遇到语法错误。我确保它不是间距或分隔符。有什么想法吗?
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 2013-10-06
  • 2016-04-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多