【问题标题】:Query returning syntax error in FROM clause查询在 FROM 子句中返回语法错误
【发布时间】:2013-07-30 20:51:06
【问题描述】:

我有 3 个不同列的表:

tableA = id(PK) & name columns
tableB = id(PK), A_ID(foreign key to tableA), name, address, etc columns
tableC = id(PK), A_ID(foreign key to tableA), name columns

我正在尝试使用以下查询根据 tableA name = ‘something’ 从所有表中的某些列中检索值,但总是返回语法错误。

“SELECT tableA.name, tableB.name, tableB.address, tableC.name FROM 
tableA, tableB, tableC JOIN tableB ON tableA.id = tableB.A_ID JOIN tableC 
ON tableA.id = tableC.A_ID WHERE tableA.name = ‘something’”  

【问题讨论】:

    标签: c# sql winforms ms-access ms-access-2010


    【解决方案1】:

    如果你想使用join 语法,你必须从from 语句中删除表

    SELECT tableA.name, tableB.name, tableB.address, tableC.name 
    FROM tableA
    INNER JOIN tableB ON tableA.id = tableB.A_ID 
    INNER JOIN tableC ON tableA.id = tableC.A_ID 
    WHERE tableA.name = 'something'
    

    我建议你使用别名,代码可读性更好:

    SELECT A.name, B.name, B.address, C.name 
    FROM tableA A
    INNER JOIN tableB B ON A.id = B.A_ID 
    INNER JOIN tableC C ON A.id = C.A_ID 
    WHERE A.name = 'something'
    

    【讨论】:

    • 如上尝试INNER JOIN
    【解决方案2】:

    否则你可以这样做:

    SELECT tableA.name, tableB.name, tableB.address, tableC.name 
    FROM tableA, tableB, tableC 
    WHERE tableA.id = tableB.A_ID AND tableA.id = tableC.A_ID 
    AND tableA.name = ‘something
    

    【讨论】:

      【解决方案3】:

      Ms Access 要求您指定加入类型:INNERLEFT;或RIGHT。 Access 不会仅将 JOIN 识别为 INNER JOIN 的同义词。

      包含多个连接的查询需要在 FROM 子句中使用括号。

      我还将您的引号字符更改为纯 "'。示例查询包括排版引号。我不知道它们是否存在于实际的 SQL 中,但我会避免它们。

      SELECT tableA.name, tableB.name, tableB.address, tableC.name
      FROM 
          (tableA
          INNER JOIN tableB
          ON tableA.id = tableB.A_ID)
          INNER JOIN tableC
          ON tableA.id = tableC.A_ID
      WHERE tableA.name = 'something'
      

      如果您有完整版的 Access,请使用查询设计器来设置联接。设计者知道让数据库引擎满意的语法规则。

      【讨论】:

      • 谢谢,这是我的问题,我的加入没有括号。我将其更改为 INNER JOIN,但使用的是 JOIN,因为我读过“默认情况下连接是内部连接”。连接语句与内部连接语句相同...... Jesse Liberty 学习 C#。
      • 许多数据库都是如此,但 Access 却不是。如果您可以使用 Access 查询设计器,您的生活会更轻松。如果您没有 Access,可能值得安装评估版。
      • 我从一个 winforms 项目运行它并使用 OleDbDataReader 来检索记录。
      【解决方案4】:

      帕拉多的答案是正确的..

      此外,您可以通过为表名使用别名来简化查询的长度。这也是一种很好的做法。

      选择 a.name、b.name、b.address 从表 A 连接表 B a.id = b.A_ID

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        • 2022-11-08
        • 1970-01-01
        • 2013-11-02
        • 2019-04-20
        • 1970-01-01
        相关资源
        最近更新 更多