3

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

这里是。

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

JOIN但 Access 会显示一条消息,提示我在声明中有错误。

我想要什么:从组合框中选择等于的Абонементы.НомерАбонементаАбонементы中选择。Абонементы.ГруппаГруппа.НаправлениеНаправление.Код

我想我应该Группы首先从组合中选择匹配条件,然后将它们加入源表。也许我的括号有问题。也许我不明白nestedJOIN在MS Access 中是如何工作的。

数据结构如图所示。

1

更新

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

4

4 回答 4

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 属性是默认值,因此当您希望返回值时不必使用属性。

于 2012-11-14T09:52:31.260 回答
0

尝试这个

SELECT Абонементы.НомерАбонемента    
FROM Абонементы    
INNER JOIN 
(Группы RIGHT JOIN Направления ON Направления.Код = Группы.Направление)
ON Группы.Код = Абонементы.Группа  
于 2012-11-14T09:41:47.197 回答
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 似乎不支持,从您所说的错误消息来看(JOIN expression not supported)。

于 2012-11-16T13:58:40.807 回答
0

如果没有确切的错误信息,我们有点盲目。但是由于您对括号的评论,我可以从一个问题开始...

希望布局更改可以清楚地说明我在此示例中移动括号的原因。 (这可能不是唯一的问题,但我希望这对你来说是一个开始)

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 你需要它们时需要包含什么。

于 2012-11-14T09:44:02.230 回答