MS Access 2016,使用复合键连接多个表
MS Access 2016, joining multiple tables with composite keys
大家早上好,
我的第一个问题,请原谅一些错误的形式。
我目前有3个table(table1、table2、table3),它们都有一个复合主键(model-number , 序列号)。这样做的目的是在各方之间拆分与序列号有关的数据,其中一些数据比其他数据更有价值,这取决于谁在查看它。复合主键共享一对一关系,t1 中的键与 t2 中的键相关,t2 中的键与 t3 中的键相关。
我正在尝试编写一个查询,按序列号从所有三个 table 中提取数据。我的印象是最好的方法是使用 INNER JOIN。到目前为止我的代码是...
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data], --placeholder for data columns
t2.[data], --placeholder for data columns
t3.[data] --placeholder for data columns
FROM [table1] t1
LEFT JOIN [table2] t2
ON t2.[model-number] = t1.[model-number] AND t2.[serial-number] = t1.[serial-number]
LEFT JOIN [table3] t3
ON t3.[model-number] = t2.[model-number] AND t3.[serial-number] = t2.[serial-number]
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
但是,当我 运行 查询时,MS Access 给我错误:
Syntax error (missing operator) in query expression "".
到目前为止我尝试过的:
- t1.[model-number] = t2.[model-number] 等的倒序...
- Adding/Removing 方括号 t1/t2/t3 别名
- 完全删除 WHERE 语句
- 将 "AS" 放在 table 别名标注前面(即 LEFT JOIN [table1] AS t1)
- 减少所有数据,以便每个 table 中只有一个字段被引用(以防我错过了我在最初尝试中调用的 30 列中某处的明显语法错误)
此外,在我解除错误后,文本光标返回到“t2.[”,在第一个 LEFT JOIN 的后半部分。
说了这么多,我找不到语法错误。我是否漏掉了一些明显的东西?
提前致谢!!到目前为止,该论坛确实帮助了我建立这个数据库。
AC
根据下面的评论,我删除了第二个 LEFT JOIN,所以代码是这样读的:
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data], --placeholder for data columns
t2.[data], --placeholder for data columns
FROM [table1] t1
LEFT JOIN [table2] t2
ON t2.[model-number] = t1.[model-number] AND t2.[serial-number] = t1.[serial-number]
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
这导致查询 运行,因此两个左连接之间发生了一些事情。我在中添加了第二个 LEFT JOIN ....
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data], --placeholder for data columns
t2.[data], --placeholder for data columns
t3.[data]
FROM [table1] t1
LEFT JOIN [table2] t2
ON t2.[model-number] = t1.[model-number] AND t2.[serial-number] = t1.[serial-number]
LEFT JOIN [table3] t3
ON t3.[model-number] = t2.[model-number] AND t3.[serial-number] = t2.[serial-number]
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
.. SELECT 语句中 table 的一列,它给了我那个错误。连续的 JOIN 子句之间是否缺少语法?
Access 显然要求 JOIN 是...我不知道这个词是什么(互斥 也许):
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data],
t2.[data],
t3.[data]
FROM (
[table1] t1
LEFT JOIN [table2] t2
ON (t2.[model-number] = t1.[model-number])
AND (t2.[serial-number] = t1.[serial-number])
)
LEFT JOIN [table3] t3
ON (t3.[model-number] = t2.[model-number])
AND (t3.[serial-number] = t2.[serial-number])
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
注意到 t1 和 t2 之间连接周围的额外括号了吗?好像有必要。
注意 - 我发现这一点的方法是使用查询设计 window 在它们的复合键上加入 tables 并将属性更改为 LEFT(即从左边开始的所有行 table 并且只匹配右边的行 table) 然后查看生成的 SQL。
我想这 every-join-a-paranthesis 事情背后的逻辑主要是每次加入你 "create" 一个你想加入的新 table。我想这主要是一个范围的事情,访问总是需要 JOIN 子句左侧的一个对象 table/[括号包围的查询]。一旦您知道您可以毫无问题地加入 5 或 7 个 table。对于 INNER JOIN 之外的任何其他内容,它们都是必需的。
大家早上好,
我的第一个问题,请原谅一些错误的形式。
我目前有3个table(table1、table2、table3),它们都有一个复合主键(model-number , 序列号)。这样做的目的是在各方之间拆分与序列号有关的数据,其中一些数据比其他数据更有价值,这取决于谁在查看它。复合主键共享一对一关系,t1 中的键与 t2 中的键相关,t2 中的键与 t3 中的键相关。
我正在尝试编写一个查询,按序列号从所有三个 table 中提取数据。我的印象是最好的方法是使用 INNER JOIN。到目前为止我的代码是...
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data], --placeholder for data columns
t2.[data], --placeholder for data columns
t3.[data] --placeholder for data columns
FROM [table1] t1
LEFT JOIN [table2] t2
ON t2.[model-number] = t1.[model-number] AND t2.[serial-number] = t1.[serial-number]
LEFT JOIN [table3] t3
ON t3.[model-number] = t2.[model-number] AND t3.[serial-number] = t2.[serial-number]
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
但是,当我 运行 查询时,MS Access 给我错误:
Syntax error (missing operator) in query expression "".
到目前为止我尝试过的:
- t1.[model-number] = t2.[model-number] 等的倒序...
- Adding/Removing 方括号 t1/t2/t3 别名
- 完全删除 WHERE 语句
- 将 "AS" 放在 table 别名标注前面(即 LEFT JOIN [table1] AS t1)
- 减少所有数据,以便每个 table 中只有一个字段被引用(以防我错过了我在最初尝试中调用的 30 列中某处的明显语法错误)
此外,在我解除错误后,文本光标返回到“t2.[”,在第一个 LEFT JOIN 的后半部分。
说了这么多,我找不到语法错误。我是否漏掉了一些明显的东西?
提前致谢!!到目前为止,该论坛确实帮助了我建立这个数据库。
AC
根据下面的评论,我删除了第二个 LEFT JOIN,所以代码是这样读的:
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data], --placeholder for data columns
t2.[data], --placeholder for data columns
FROM [table1] t1
LEFT JOIN [table2] t2
ON t2.[model-number] = t1.[model-number] AND t2.[serial-number] = t1.[serial-number]
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
这导致查询 运行,因此两个左连接之间发生了一些事情。我在中添加了第二个 LEFT JOIN ....
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data], --placeholder for data columns
t2.[data], --placeholder for data columns
t3.[data]
FROM [table1] t1
LEFT JOIN [table2] t2
ON t2.[model-number] = t1.[model-number] AND t2.[serial-number] = t1.[serial-number]
LEFT JOIN [table3] t3
ON t3.[model-number] = t2.[model-number] AND t3.[serial-number] = t2.[serial-number]
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
.. SELECT 语句中 table 的一列,它给了我那个错误。连续的 JOIN 子句之间是否缺少语法?
Access 显然要求 JOIN 是...我不知道这个词是什么(互斥 也许):
SELECT
t1.[model-number],
t1.[serial-number],
t1.[track],
t1.[data],
t2.[data],
t3.[data]
FROM (
[table1] t1
LEFT JOIN [table2] t2
ON (t2.[model-number] = t1.[model-number])
AND (t2.[serial-number] = t1.[serial-number])
)
LEFT JOIN [table3] t3
ON (t3.[model-number] = t2.[model-number])
AND (t3.[serial-number] = t2.[serial-number])
WHERE t1.[track] = TRUE
ORDER BY t1.[model-number], t1.[serial-number] DESC;
注意到 t1 和 t2 之间连接周围的额外括号了吗?好像有必要。
注意 - 我发现这一点的方法是使用查询设计 window 在它们的复合键上加入 tables 并将属性更改为 LEFT(即从左边开始的所有行 table 并且只匹配右边的行 table) 然后查看生成的 SQL。
我想这 every-join-a-paranthesis 事情背后的逻辑主要是每次加入你 "create" 一个你想加入的新 table。我想这主要是一个范围的事情,访问总是需要 JOIN 子句左侧的一个对象 table/[括号包围的查询]。一旦您知道您可以毫无问题地加入 5 或 7 个 table。对于 INNER JOIN 之外的任何其他内容,它们都是必需的。