嵌套的JOIN不起作用

时间:2012-11-14 09:38:26

标签: sql ms-access join ms-access-2007

我正在尝试将SQL查询设置为ComboBox的行源。

在这里。

SELECT Абонементы.НомерАбонемента
  FROM Абонементы
 INNER JOIN (Группы ON Группы.Код = Абонементы.Группа
             RIGHT JOIN Направления ON Направления.Код = Группы.Направление)
 WHERE Абонементы.НомерКарты = [НомерКарты].[Value],
       Направления.Код = [NaprCombo].[Value],
       Абонементы.ДатаОкончания > Date

但Access会在JOIN语句中显示一条错误消息。

我想要的是:从表格Абонементы.НомерАбонемента中选择Абонементы,其中Абонементы.Группа的{​​{1}}等于Группа.Направление在组合框中的选择。

我想我应该首先从combobos中选择Направление.Код匹配条件,然后将它们连接到源表。也许我的括号有问题。也许我不明白嵌套Группы在MS Access中是如何工作的。

数据结构显示在图片上。

1

更新

Access给出的确切消息:“JOIN操作中的语法错误”。

4 个答案:

答案 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)。