sql
  • vba
  • ms-access
  • multivalue
  • 2017-02-28 93 views 0 likes 
    0

    我试图找到最优化的方式来做到这一点的操作运行在SQL语句访问,VBA:优化SQL查询中VBA

    SQl = "UPDATE " _ 
    & "MainTable As T1 " _ 
    & "INNER JOIN TableOfLists As T2 " _ 
    & "ON (T2.SecondList = T1.MultiValuedList.value) " _ 
    & "Set [FOUND IN LISTS] = 'YES' " 
    DoCmd.RunSQL SQl 
    
    SQl = "UPDATE " _ 
    & "MainTable As T1 " _ 
    & "INNER JOIN TableOfLists As T2 " _ 
    & "ON (T2.FirstList = T1.MultiValuedList.value) " _ 
    & "Set [FOUND IN LISTS] = 'YES' " 
    DoCmd.RunSQL SQl 
    

    此代码的工作,能够可靠地改善,但我没有无法找出如何。

    我到目前为止已经试过,结果我得到了:

    1. Adding 2 INNER JOIN但我得到一个语法错误3075
    2. Adding 2 conditions separated by an OR in the INNER JOIN condition,但我得到一个错误3081:不能参加超过1表
    3. This was my previous solution using 2 SELECT statements但我 得到了推荐使用JOIN代替

    欢迎任何建议!

    +0

    你的意思是在((T2.SecondList = T1.MultiValuedList.value))或(T2.FirstList = T1.MultiValuedList.value)???? –

    +0

    是的,括号没有任何区别 – Seb

    +0

    我的意思是“括号”的“括号” – Seb

    回答

    3

    你在这里。这是ANSI SQL方式的一种做法,因为UPDATE中的连接不受支持。 (请参阅this blog entry了解更多详细信息。)这就是为什么您在第一种方法中看到错误(使用两个INNER JOIN,因为Access/Jet在其UPDATE语法中为您提供了一个特殊功能,但它不像vanilla SQL那样完全开发是因为Access/Jet对连接条件中条件的支持非常有限(例如,在Oracle或Postgres中你不会看到这一点),你的第二种方法(在连接条件中带有OR)出错了。第三种方法(有两个选择,但使用IN而不是EXISTS)是相同的,所以谁告诉你使用连接是不明智的:)。

    UPDATE MainTable SET [FOUND IN LISTS]='YES' 
    WHERE 
        EXISTS (SELECT 1 FROM TableOfLists WHERE FirstList=MainTable.[value]) 
        OR 
        EXISTS (SELECT 1 FROM TableOfLists WHERE SecondList=MainTable.[value]); 
    

    Example in Access

    +0

    非常感谢这个答案!正是我在找的东西:) – Seb

    相关问题