4

次のような 2 つのテーブルがあります。

('MASTER_EOD' TABLE)
ID  SHA1_HEX    ROLE
----------------------------
1   ff34bb03    2
2   eef0a005    1



('ROLE_INDEX' TABLE)
ROLE_NUM    ROLE_NAME
--------------------------
 1           Welcome Calls
 2           Follow Up
 3           Outbound

なお、表ROLEには が併記されている。ROLE_NUMROLE_INDEX

ROLE_NAME(「Follow Up」、「Outbound」など) などから文字列を渡すことができる修正クエリを作成しようとしています。関連付けROLE_NUMられているものは「ROLE」列に配置されます。

テストとして、次のクエリでこれを達成しようとしました。

INSERT INTO master_eod ( sha1_hex, role )
VALUES ('ef03ff03',(SELECT role_num FROM role_index WHERE role_name='Follow Up'));

しかし、次のエラーが表示されます: クエリ入力には、少なくとも 1 つのテーブルまたはクエリが含まれている必要があります。

ただし、SELECT role_num FROM role_index WHERE role_name='Follow Up'独自のクエリに入れると機能します。同様に、 SELECT 部分全体に3などの生の値を指定すると、機能します。

私は何が欠けていますか?何らかの形で「INNER JOIN」を使用する必要があると思いますが、まだ SQL の基礎を学んでおり、この特定の問題と Access がエラーをスローする理由を理解できません。

4

2 に答える 2

7

単一の列サブクエリではなく、SELECTソース全体としてを使用して、SQL で最も標準的な方法で実行してみてください。INSERT

INSERT INTO master_eod ( sha1_hex, role )
SELECT 'ef03ff03', role_num FROM role_index WHERE role_name='Follow Up' ;

SELECTこのようなクエリ (単独) が単一の行のみを返すことを確認する必要があることに注意してください。そうしないと、見つかった role_num ごとに 1 つずつ、1 回で一度に多くの行を挿入することになります (これは望ましい場合とそうでない場合があります)。

于 2013-07-20T00:26:53.583 に答える
2

DLookupクエリを式に置き換えることができSELECT role_num ...ます。

SELECT role_num FROM role_index WHERE role_name='Follow Up'
DLookup("role_num", "role_index", "role_name='Follow Up'")

あなたのでそれを使用しDLookupてくださいINSERT

INSERT INTO master_eod
    (
        sha1_hex,
        [role]
    )
VALUES
    (
        'ef03ff03',
        DLookup("role_num", "role_index", "role_name='Follow Up'")
    );

予約語roleなので、角かっこで囲みました。

于 2013-07-20T00:32:26.867 に答える