基本思路:我想要一个特定部门中存在的所有进程的列表。流程与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']时才有效,但这似乎对我来说不对。任何帮助表示赞赏!
答案 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