VBA / SQL:嵌套查询,令人困惑的数据不匹配

时间:2017-12-08 14:25:06

标签: sql ms-access

基本思路:我想要一个特定部门中存在的所有进程的列表。流程与OperationalUnits相关,后者与Divisions相关。

我想要的查询:

SELECT ID, ProcessName FROM Processes WHERE Unit IN (SELECT ID FROM OperationalUnits WHERE Division='1');

这总是让我觉得表达式中的#34;类型不匹配"错误。

我已经通过将查询分解为两个组件查询进行了测试:

SELECT ID FROM OperationalUnits WHERE Division='1';

这会返回一个ID,即2,这是我对测试数据的期望。

SELECT ID, ProcessName FROM Processes WHERE Unit IN ('2');

这会返回一个进程,这也是我所期望的。

但是,如果我将它们组合在一起进入主查询?不。问题似乎是内部查询返回[2],而外部查询只有在返回[' 2']时才有效,但这似乎对我来说不对。任何帮助表示赞赏!

2 个答案:

答案 0 :(得分:1)

除非在特定情况下,否则访问权限不会自动转换类型。正如评论中所讨论的,由于您的字段具有不同的类型,您可以做两件事:使用函数强制转换或更改类型。

要投射,您可以使用以下内容:

SELECT ID, ProcessName FROM Processes WHERE Unit IN (SELECT CStr(ID) FROM OperationalUnits WHERE Division='1');

答案 1 :(得分:0)

您可以更改SQL中的数据类型,尽管最好使用匹配的数据类型。

Access无法在设计视图中表示连接,但它会很好地执行它:

SELECT  Processes.ID
        , ProcessName
FROM    Processes INNER JOIN OperationalUnits ON CLNG(Processes.Unit) = OperationalUnits.ID