查询FROM子句中的返回语法错误

时间:2013-07-30 15:45:02

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

我有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’”  

4 个答案:

答案 0 :(得分:2)

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

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'

答案 1 :(得分:1)

Access女士要求您指定联接类型:INNER; LEFT;或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,请使用查询设计器设置连接。设计人员知道保持数据库引擎满意的语法规则。

答案 2 :(得分:0)

否则你可以这样做:

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 :(得分:0)

Parado的答案是正确的..

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

选择a.name,b.name,b.address 来自tableA a   加入tableB b     在a.id = b.A_ID