我正在尝试将SQL查询设置为ComboBox的行源。
在这里。
SELECT Абонементы.НомерАбонемента
FROM Абонементы
INNER JOIN (Группы ON Группы.Код = Абонементы.Группа
RIGHT JOIN Направления ON Направления.Код = Группы.Направление)
WHERE Абонементы.НомерКарты = [НомерКарты].[Value],
Направления.Код = [NaprCombo].[Value],
Абонементы.ДатаОкончания > Date
但Access会在JOIN
语句中显示一条错误消息。
我想要的是:从表格Абонементы.НомерАбонемента
中选择Абонементы
,其中Абонементы.Группа
的{{1}}等于Группа.Направление
在组合框中的选择。
我想我应该首先从combobos中选择Направление.Код
匹配条件,然后将它们连接到源表。也许我的括号有问题。也许我不明白嵌套Группы
在MS Access中是如何工作的。
数据结构显示在图片上。
Access给出的确切消息:“JOIN操作中的语法错误”。
答案 0 :(得分:0)
试试这个
SELECT Абонементы.НомерАбонемента
FROM Абонементы
INNER JOIN
(Группы RIGHT JOIN Направления ON Направления.Код = Группы.Направление)
ON Группы.Код = Абонементы.Группа
答案 1 :(得分:0)
如果没有确切的错误消息,我们会有点失明。但是我可以看到一个问题,感谢您对括号的评论......
希望布局更改能够清楚说明为什么我在此示例中移动了paranthesis。 (可能不是唯一的问题,但我希望这对你来说是一个开始)。
SELECT
Абонементы.НомерАбонемента
FROM
Абонементы
INNER JOIN
(
Группы
RIGHT JOIN
Направления
ON Направления.Код = Группы.Направление
)
ON Группы.Код = Абонементы.Группа
WHERE
Абонементы.НомерКарты = [НомерКарты].[Value] AND
Направления.Код = [NaprCombo].[Value] AND
Абонементы.ДатаОкончания > Date
注意我还将WHERE x, y, z
更改为WHERE x AND y AND z
。
它实际上也应该没有括号。 (虽然我没有使用Access,并且知道它有一些'有趣'的规则。)希望这是一个很好的例子,说明if / when何时需要它们。
答案 2 :(得分:0)
我无法确定这会返回您想要的数据,但重要的是您有一个JOIN的子查询:
SELECT t1.НомерАбонемента
FROM Направления
LEFT JOIN
(SELECT Группы.Направление,
Абонементы.НомерАбонемента,
Абонементы.ДатаОкончания
FROM Абонементы
INNER JOIN Группы ON Группы.Код = Абонементы.Группа ) As t1
ON Направления.Код = t1.Направление
WHERE t1.НомерКарты = [НомерКарты]
AND Направления.Код = [NaprCombo]
AND t1.ДатаОкончания > Date
我建议您在添加WHERE语句之前使查询正常工作。 WHERE语句与AND / OR连接,而不是逗号。控件的value属性是默认值,因此当您希望返回值时,不必使用属性。
答案 3 :(得分:0)
您似乎不需要正确的加入。一直使用内部连接,只需给它一个正确的包围:
SELECT Абонементы.НомерАбонемента
FROM (Абонементы
INNER JOIN Группы ON Группы.Код = Абонементы.Группа)
INNER JOIN Направления ON Направления.Код = Группы.Направление
WHERE Абонементы.НомерКарты = [НомерКарты].[Value],
Направления.Код = [NaprCombo].[Value],
Абонементы.ДатаОкончания > Date
基本上,如果连接的左侧也不是表引用而是连接,则必须用括号括起来。例如,如果只有两个表,则不需要括号:
... FROM A JOIN B ON ...
但是如果你引入另一个联接,你会这样:
... FROM (A JOIN B ON ...) JOIN C ON ...
如果还有另一个,你需要将前两个连接括起来:
... FROM ((A JOIN B ON ...) JOIN C ON ...) JOIN D ON ...
等等。
的替代语法
... FROM A JOIN (B JOIN C ON ...) ON ...
MS Access的(您的版本)似乎不支持,根据您获得的said错误消息判断(JOIN expression not supported
)。