1
select t2.s_studentreference
        , t1.p_surname
        , t1.p_forenames
        , t3.e_reference
        , t3.e_name
    from capd_a t1
    right outer join capd_b t2
      on (t2.s_id = t1.p_id)
    join capd_c t3 
      on ((t3.e_student=t1.p_id) and (t3.e_reference='D /YR2A2/12'))

次のエラーが表示されます。

Syntax Error (Missing Operator) on (t2.s_id = t1.p_id)
        join capd_c t3 
          on ((t3.e_student=t1.p_id) and (t3.e_reference='D /YR2A2/12')) 

私のクエリの何が問題なのですか?

4

3 に答える 3

2

Access には、ISO/ANSI 標準ではなく、変質したバージョンの SQL があります。2つ以上のテーブルを結合するときは、括弧が本当に好きです(読む:必要です)。括弧内で許可される結合のタイプ (LEFT、RIGHT、INNER) にも制限があります。

from 
   (                           --- required
     capd_a t1 
INNER join capd_b t2           --- RIGHT join turned into INNER
  on (t2.s_id = t1.p_id)
   )                           --- required
INNER join capd_c t3 
  on ((t3.e_student=t1.p_id) and (t3.e_reference='D /YR2A2/12'))
于 2012-09-24T06:53:39.450 に答える
1

Access クエリ デザイナーでクエリを作成してみてください。別のデータベース システムから来ているので、クエリ デザイナーはあまり好きではないかもしれませんが、Access db エンジンが受け入れることができる SQL を作成するのに役立つので、試してみることをお勧めします。

直面している違いには次のものがあります。

  1. クエリに 2 つ以上のデータ ソースが含まれていて、それらの位置について非常に厳しい場合、Access には括弧が必要です。
  2. データベース エンジンは JOIN を の同義語として認識しませんINNER JOININNER常に結合タイプ ( ; LEFT; またはRIGHT) を指定する必要があります。
  3. エンジンは を受け入れRIGHT OUTER JOINますが、クエリ デザイナーはそれを単に に変更しますRIGHT JOIN。したがって、実際には違いはありませんが、混乱を避けるために言及しただけです。

クエリ デザイナーを許容できない場合は、これを出発点として提供します。

select t2.s_studentreference
        , t1.p_surname
        , t1.p_forenames
        , t3.e_reference
        , t3.e_name
    from (capd_a t1
    inner join capd_b t2
      on t2.s_id = t1.p_id)
    inner join capd_c t3 
      on t3.e_student=t1.p_id
where t3.e_reference='D /YR2A2/12'

特定の状況では、Accessが同じクエリで結合LEFTまたはRIGHT結合して結合するため、両方とも内部結合を使用します。この場合、INNERあなたの参加が問題になるかどうかはわかりませんが、どちらも確実に機能します。そのため、最初に残りのクエリ構文をすべて正しく機能させてから、必要に応じて結合の種類を修正してください。RIGHTINNER

節から節に移動t3.e_reference='D /YR2A2/12'しましONWHERE。それが私の好みですが、どちらの方法でも違いはないと思います。

于 2012-09-24T08:13:16.273 に答える
0

クエリにはt3.e_reference='D /YR22/A12'ONステートメントの範囲から除外する必要があるステートメントの範囲が含まれONているため、ステートメントの範囲外に個別にON記述します......

このようにすることができます。

select t2.s_studentreference
        , t1.p_surname
        , t1.p_forenames
        , t3.e_reference
        , t3.e_name
    from capd_a t1
    right outer join capd_b t2
      on (t2.s_id = t1.p_id)
    join capd_c t3 
      on (t3.e_student=t1.p_id)
 and (t3.e_reference='D /YR2A2/12')

WHEREまたは、クエリで句を使用できます。

 SELECT t2.s_studentreference
            , t1.p_surname
            , t1.p_forenames
            , t3.e_reference
            , t3.e_name
        FROM capd_a t1
        RIGHT OUTER JOIN capd_b t2
          ON (t2.s_id = t1.p_id)
        JOIN capd_c t3 
          ON (t3.e_student = t1.p_id)
     WHERE t3.e_reference='D /YR2A2/12'
于 2012-09-24T06:42:12.227 に答える