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