7

TSQL (MS SQL Server 2000 および 2005 で使用) では、複数の JOIN 句を次々に使用できます。カンマや括弧は必要ありません。Access でこれを試すと、「クエリ式に構文エラー (演算子がありません) ...」というエラーが表示されます。

私が Google ランドで収集できたものから、Access SQL は括弧で JOIN 句をグループ化する必要があります。これを実現する方法に関するほとんどのアドバイスは、デザイン ビューまたはクエリ ウィザードを使用して、Access にかっこを配置する場所を判断させることです (標準 SQL では必要ありません)。問題は、テキスト エディター (メモ帳、SSMS、VS2005 など) で SQL を実行することに慣れすぎているため、デザイン ビューとウィザードが邪魔になり、身動きが取れなくなってしまうことです。ウィザードは、複数の可能性がある場合に何を結合するかについて間違った仮定をすることがあります。

TSQL を Access SQL に変換するツール、または少なくとも括弧をどこに置くかに関する一連の規則はありませんか?

例:

SELECT ...
FROM Participant PAR
    INNER JOIN Individual IND 
        ON PAR.APETSID = IND.APETSID
    INNER JOIN Ethnicity ETH 
        ON IND.EthnicityID = ETH.ID
    INNER JOIN Education EDU 
        ON IND.EducationID = EDU.ID
    INNER JOIN Marital MAR 
        ON IND.Marital = MAR.ID
    INNER JOIN Participant-Probation PXP 
        ON PAR.ID = PXP.ParticipantID
    INNER JOIN Probation PBN 
        ON PXP.ProbationID = PBN.ID
    INNER JOIN Class-Participant CXP 
        ON PAR.ID = CXP.ParticipantID
    INNER JOIN Class CLS 
        ON CXP.ClassID = CLS.ID
    INNER JOIN Official OFR 
        ON PAR.ReferringPO = OFR.ID
    INNER JOIN Participant-Official PXO 
        ON PAR.ID = PXO.ParticipantID
    INNER JOIN Official OFA 
        ON PXO.OfficialID = OFA.ID
4

2 に答える 2

3

ええ、MS-Access はばかです。

存在しないと思います (おそらく、MS-SQL/TSQL から MS-Access に移行する巨大な市場ではありません)。通常、私はデザイン ビューを使用しますが、これは私に関する限り、実際にはウィザードではありません。次に、テーブルを手動で追加し、(適切な関係シップ図を作成していない場合、または何かが少し変わっている場合)、Designer で手動で関係を作成します。その後、SQL ビューでクエリをチェックし、必要に応じて修正します。

あなたの例の場合(あなたが示したように)、おそらく括弧が必要であり、手動で追加する必要があります。おそらく次のようなものが必要です。

SELECT ...
FROM (((Participant PAR
    INNER JOIN Individual IND 
        ON PAR.APETSID = IND.APETSID)
    INNER JOIN Ethnicity ETH 
        ON IND.EthnicityID = ETH.ID)
    INNER JOIN Education EDU 
        ON IND.EducationID = EDU.ID)
    INNER JOIN Marital MAR 
        ON IND.Marital = MAR.ID

(N 個の内部結合がある場合、最初に N-1 個の開き括弧が必要であり、結合の最後に 1 個、最後のものを除く)

于 2009-04-27T20:01:25.843 に答える
0

これはAccessで機能します。

SELECT *
FROM (((Individual AS IND 

INNER JOIN Ethnicity AS ETH 
    ON IND.EthnicityID = ETH.ID) 

INNER JOIN Education AS EDU 
    ON IND.EducationID = EDU.ID) 

INNER JOIN Marital AS MAR 
    ON IND.Marital = MAR.ID) 

INNER JOIN (((((((Participant AS PAR 

    INNER JOIN Official AS OFR 
        ON PAR.ReferringPO = OFR.ID) 

    INNER JOIN [Class-Participant] AS CXP 
        ON PAR.ID = CXP.ParticipantID) 

    INNER JOIN Class AS CLS 
        ON CXP.ClassID = CLS.ID) 

    INNER JOIN [Participant-Official] AS PXO 
        ON PAR.ID = PXO.ParticipantID) 

    INNER JOIN Official AS OFA 
        ON PXO.OfficialID = OFA.ID) 

    INNER JOIN [Participant-Probation] AS PXP 
        ON PAR.ID = PXP.ParticipantID) 

    INNER JOIN Probation AS PBN 
        ON PXP.ProbationID = PBN.ID) 

 ON IND.APETSID = PAR.APETSID

ご覧のとおり、結合するテーブルはグループ化されています。

于 2009-04-27T23:08:45.520 に答える