Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Access SQL视图中出现语法错误_Sql_Ms Access_Syntax - Fatal编程技术网

Access SQL视图中出现语法错误

Access SQL视图中出现语法错误,sql,ms-access,syntax,Sql,Ms Access,Syntax,我总是在Access SQL方面遇到问题。该语法要求随机添加括号或移动与SQL Server不同的内容。有人知道这里可能有什么语法错误吗?错误集中在FROM子句周围。我知道其他条款还可以,但我把它们留了下来作为参考 更新:代码简化了很多。我主要关心的是FROM的3个从句 SELECT ... FROM (((maintable INNER JOIN othertable ON (maintable.A = othertable.A) AND (maintable.B

我总是在Access SQL方面遇到问题。该语法要求随机添加括号或移动与SQL Server不同的内容。有人知道这里可能有什么语法错误吗?错误集中在FROM子句周围。我知道其他条款还可以,但我把它们留了下来作为参考

更新:代码简化了很多。我主要关心的是FROM的3个从句

SELECT 

  ...

FROM 

  (((maintable

    INNER JOIN othertable ON (maintable.A = othertable.A) AND (maintable.B = othertable.B))

    INNER JOIN 

        (SELECT

          ...

        FROM

          (thirdtable)
          INNER JOIN fourthtable ON thirdtable.blah = fourthtable.blah

        WHERE

          fourthtable.something <> 1

        GROUP BY

          ...

        )  AS innerselect1 ON (othertable.item = innerselect1.item) AND (othertable.whse = innerselect1.whse)) AS table1)

    JOIN (

            SELECT ...
            FROM (othertable INNER JOIN maintable ON othertable.item = maintable.item)
            GROUP BY ...
            HAVING ...

          ) AS table2 ON table1.item = table2.item

WHERE 

    ... 

GROUP BY 

  ...

HAVING

  ...

UNION ALL

SELECT 

  ...

FROM 

  (((maintable

    INNER JOIN othertable ON (maintable.A = othertable.A) AND (maintable.B = othertable.B))

    INNER JOIN 

        (SELECT

          ...

        FROM

          (thirdtable)
          INNER JOIN fourthtable ON thirdtable.blah = fourthtable.blah

        WHERE

          fourthtable.something <> 1

        GROUP BY

          ...

        )  AS innerselect1 ON (othertable.item = innerselect1.item) AND (othertable.whse = innerselect1.whse)) AS table1)

    LEFT JOIN (

            SELECT ...
            FROM (othertable INNER JOIN maintable ON othertable.item = maintable.item)
            GROUP BY ...
            HAVING ...

          ) AS table2 ON table1.item = table2.item

WHERE 

    table2.item IS NULL 

GROUP BY 

  ...

HAVING

  ...

UNION ALL

SELECT 

  ...

FROM 

  (((maintable

    INNER JOIN othertable ON (maintable.A = othertable.A) AND (maintable.B = othertable.B))

    INNER JOIN 

        (SELECT

          ...

        FROM

          (thirdtable)
          INNER JOIN fourthtable ON thirdtable.blah = fourthtable.blah

        WHERE

          fourthtable.something <> 1

        GROUP BY

          ...

        )  AS innerselect1 ON (othertable.item = innerselect1.item) AND (othertable.whse = innerselect1.whse)) AS table1)

    RIGHT JOIN (

            SELECT ...
            FROM (othertable INNER JOIN maintable ON othertable.item = maintable.item)
            GROUP BY ...
            HAVING ...

          ) AS table2 ON table1.item = table2.item

WHERE 

    table1.item IS NULL  

GROUP BY 

  ...

HAVING

  ...
;
Access SQL中不支持完全外部联接

有关解决方法,请参见例如

或者:pAccess SQL中不支持完全外部联接

有关解决方法,请参见例如

或:p

[Access SQL]语法要求随机添加括号

这不是随机的。我假设你误用了random这个词,就像人们从字面上误用这个词一样

当涉及多个连接条件时,Access SQL通常需要括号。也就是说,它倾向于抱怨这样的结构:

SELECT ...
FROM 
    tbl1 
    INNER JOIN tbl2 ON tbl1.fld = tbl2.fld1
    INNER JOIN tbl3 ON tbl2.fld = tbl3.fld2
相反,它需要在一个完整的内部联接周围加上括号。当我手工编写Access SQL时,我更喜欢这样使用缩进

SELECT ...
FROM 
    (
        tbl1 
        INNER JOIN 
        tbl2 
        ON tbl1.fld = tbl2.fld1
    )
    INNER JOIN 
    tbl3 
    ON tbl2.fld = tbl3.fld2
第二个例子:

而不是

SELECT ...
FROM 
    tbl1 
    INNER JOIN tbl2 ON tbl1.fld = tbl2.fld1
    INNER JOIN tbl3 ON tbl2.fld = tbl3.fld2
    INNER JOIN tbl4 ON tbl3.fld = tbl4.fld3
更像是

SELECT ...
FROM 
    (
        (
            tbl1 
            INNER JOIN 
            tbl2 
            ON tbl1.fld = tbl2.fld1
        )
        INNER JOIN 
        tbl3 
        ON tbl2.fld = tbl3.fld2
    )
    INNER JOIN 
    tbl4 
    ON tbl3.fld = tbl4.fld3
[Access SQL]语法要求随机添加括号

这不是随机的。我假设你误用了random这个词,就像人们从字面上误用这个词一样

当涉及多个连接条件时,Access SQL通常需要括号。也就是说,它倾向于抱怨这样的结构:

SELECT ...
FROM 
    tbl1 
    INNER JOIN tbl2 ON tbl1.fld = tbl2.fld1
    INNER JOIN tbl3 ON tbl2.fld = tbl3.fld2
相反,它需要在一个完整的内部联接周围加上括号。当我手工编写Access SQL时,我更喜欢这样使用缩进

SELECT ...
FROM 
    (
        tbl1 
        INNER JOIN 
        tbl2 
        ON tbl1.fld = tbl2.fld1
    )
    INNER JOIN 
    tbl3 
    ON tbl2.fld = tbl3.fld2
第二个例子:

而不是

SELECT ...
FROM 
    tbl1 
    INNER JOIN tbl2 ON tbl1.fld = tbl2.fld1
    INNER JOIN tbl3 ON tbl2.fld = tbl3.fld2
    INNER JOIN tbl4 ON tbl3.fld = tbl4.fld3
更像是

SELECT ...
FROM 
    (
        (
            tbl1 
            INNER JOIN 
            tbl2 
            ON tbl1.fld = tbl2.fld1
        )
        INNER JOIN 
        tbl3 
        ON tbl2.fld = tbl3.fld2
    )
    INNER JOIN 
    tbl4 
    ON tbl3.fld = tbl4.fld3

Access一次只能联接两个表。你需要很多括号。有趣的是,我不知道。Access一次只能连接两个表。你需要很多括号。很有趣,我不知道。是否有一种访问等价物,将一个字段上的两个表连接起来,并返回字段不匹配的行?是否有一种访问等价物,将一个字段上的两个表连接起来,并返回字段不匹配的行?如果我有两个内部连接和一个左连接怎么办?然后在字段周围放一对括号JOIN您希望首先执行,并且该结果将被联接到第三个表。我有点困惑。你是说从tbl1内部连接tbl2到。。。上的内部联接tbl3。。。左连接tbl4打开。。。或者你的意思是从tbl1内部连接到tbl2上。。。上的内部联接tbl3。。。左连接tbl4在?我用更简单的代码更新了我的问题,以便更好地显示我当前使用的括号。对不起,我误读了你的原始评论。我很快会更新我的答案。如果我有两个内部连接和一个左连接呢?然后你只需在你想首先执行的连接周围放一对括号,结果将被连接到第三个表。我有点困惑。你是说从tbl1内部连接tbl2到。。。上的内部联接tbl3。。。左连接tbl4打开。。。或者你的意思是从tbl1内部连接到tbl2上。。。上的内部联接tbl3。。。左连接tbl4在?我用更简单的代码更新了我的问题,以便更好地显示我当前使用的括号。对不起,我误读了你的原始评论。我很快会更新我的答案。