3

SQLクエリをComboBoxの行ソースとして設定しようとしています。

ここにあります。

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

しかし、Accessは、JOINステートメントにエラーがあるというメッセージを表示します。

私が欲しいもの:コンボボックスで選択されたものと等しいとなるАбонементы.НомерАбонементаテーブルから選択します。АбонементыАбонементы.ГруппаГруппа.НаправлениеНаправление.Код

Группы最初にコンボから一致する条件を選択してから、それらをソーステーブルに結合する必要があると思います。かっこに問題があるかもしれません。たぶん私はネストされたがMSAccessでどのように機能するのか理解していませんJOIN

データ構造は写真に示されています。

1

アップデート

Accessからの正確なメッセージ:「JOIN操作の構文エラー」。

4

4 に答える 4

0

あなたは正しい参加を必要としないようです。内側の結合を最後まで使用し、正しいブラケットを付けます。

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

基本的に、結合の左側もテーブル参照ではなく結合である場合は、角かっこで囲む必要があります。たとえば、テーブルが2つしかない場合、角かっこは必要ありません。

... FROM A JOIN B ON ...

ただし、別の参加を導入すると、次のようになります。

... FROM (A JOIN B ON ...) JOIN C ON ...

また、別の結合がある場合は、最初の2つの結合を次のように括弧で囲む必要があります。

... FROM ((A JOIN B ON ...) JOIN C ON ...) JOIN D ON ...

等々。

の代替構文

... FROM A JOIN (B JOIN C ON ...) ON ...

( )が表示されたと言ったエラーメッセージから判断すると、(お使いのバージョンの)MSAccessではサポートされていないようですJOIN expression not supported

于 2012-11-16T13:58:40.807 に答える
0

これを試して

SELECT Абонементы.НомерАбонемента    
FROM Абонементы    
INNER JOIN 
(Группы RIGHT JOIN Направления ON Направления.Код = Группы.Направление)
ON Группы.Код = Абонементы.Группа  
于 2012-11-14T09:41:47.197 に答える
0

正確なエラー メッセージがなければ、私たちは少し盲目的に飛んでいます。しかし、括弧についてのコメントのおかげで、まず 1 つの問題を見ることができます...

レイアウトを変更することで、この例で括弧を移動した理由が明確になることを願っています。 (それだけの問題ではないかもしれませんが、それがあなたにとっての始まりであることを願っています) .

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 を使用していませんが、Access にはいくつかの「面白い」ルールがあることは知っています。) うまくいけば、これは if/when でそれらを必要とする場合に何を包む必要があるかの良い例です。

于 2012-11-14T09:44:02.230 に答える
0

これで必要なデータが返されるかどうかはわかりませんが、重要なのは、JOIN の 1 つに対するサブクエリがあることです。

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 に答える