大家早上好,
我的第一个问题,如果它存在的话,请原谅一些坏的形式。
我现在有三个表(table1、table2、table3),所有这些表都有一个复合主键(型号、序列号)。其意图是在缔约方之间分割与序列号有关的数据,其中一些数据比另一些数据更有价值,这取决于谁在看它。复合主键共享一对一的关系,t1中的键与t2中的键相关,t2中的键与t3中的键相关。
我正在尝试编写一个查询,通过序列号从所有三个表中提取数据。我的印象是最好的方法是内部连接。到目前为止我的代码是..。
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会给出错误:
查询表达式"“中的语法错误(缺少运算符)。
到目前为止我尝试过的是:
另外,在我取消错误后,文本光标返回到“t2.[",在第一个左联接的后半部分。
也就是说,我找不到语法错误。我漏掉了什么明显的东西吗?
提前谢谢!!到目前为止,论坛确实帮助我建立了这个数据库。
交流
根据下面的注释,我删除了第二个左联接,因此代码如下:
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;这导致查询运行,因此两个左联接之间发生了一些事情。我加了第二个左加入.
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语句中的表中....with一列,它给出了这个错误。在连续的联接子句之间是否缺少语法?
发布于 2019-07-05 07:09:57
我想这背后的逻辑是,每个连接-一个妄想的事情主要是,你“创造”一个新的表,你想要加入。我想这主要是一个作用域问题,access总是希望一个对象表/查询被JOIN子句左边的偏执所包围。一旦你知道你可以加入像那样的5或7个表,一点问题都没有。对于除了内部连接之外的其他任何东西,它们都是必要的。
https://stackoverflow.com/questions/45512929
复制相似问题