1

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

4 回答 4

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'
于 2013-07-30T15:46:04.300 回答
1

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 可用,请使用查询设计器来设置连接。设计者知道使数据库引擎满意的语法规则。

于 2013-07-30T15:54:54.393 回答
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
于 2013-07-30T15:50:26.217 回答
0

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

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

select a.name, b.name, b.address from tableA a join tableB b on a.id = b.A_ID

于 2013-07-30T15:57:04.690 回答