Search code examples
sqlms-access

Access 16 append query - Syntax error (missing operator) in query expression WHERE clause


I am still not too experienced with access, SQL, VBA and this is my first post. So please go easy on me! Okay lets get to it. I have been updating an access file due to irrelevant and duplicate records showing up on reports.

First I was having trouble appending records due to Key violations that I determined was due to appending to primary key fields, which I remedied by creating an autonumber ID Primary key on the destination table. I am having trouble updating the query with a WHERE clause to not add records already on the destination table. Field and table names have been changed below, but I am trying to insert into "dandy" from "bag" and "rug".

Error message reads:

Syntax error (missing operator) in query expression '"NOOB"
        WHERE [rug].[TENT] AND [rug].[CANDY] NOT IN (SELECT [TENT] AND [CANDY] FROM [dandy])'.

See SQL Code below:

INSERT INTO dandy(CANDY, FUN, DOG, TREAT, BUMPY, TENT, System )
    SELECT  Val([CANDY]) AS Burger,
            Val([FUN]) AS FUN_VAL,
            rug.STOVE,
            rug.TREAT,
            IIf([Bag]![Water] Is Not Null,[Bag]![Water],[rug]![BUMPY]) AS BUMPY,
            rug.TENT,
            "NOOB" AS System
    FROM rug 
        INNER JOIN [crib] ON rug.CANDY= [crib].Dip)
        INNER JOIN Bag ON ([crib].FacNum = Bag.[Trip]) AND (rug.TENT = Bag.Lip)
    GROUP BY 
        Val([CANDY]),
        Val([FUN]),
        [rug].STOVE,
        [rug].TREAT,
        IIf([Bag]![Water] Is Not Null,
        [Bag]![Water]
        [rug]![BUMPY]),
        rug.TENT,
        "NOOB"
    WHERE [rug].[TENT] AND [rug].[CANDY] NOT IN (SELECT [TENT] AND [CANDY] FROM [dandy])
    HAVING  (((IIf([Bag]![Water] Is Not Null,
               [Bag]![Water],
               [rug]![BUMPY])) Is Null));


Solution

  • If you want to prevent duplicate pairs of Tent and Candy in table, just set a compound Index in table with those two fields. Records that would cause duplication will be rejected. The IN() criteria can be eliminated.

    As for the IN() criteria, I tested your original syntax. It does not error but also does not retrieve records. Splitting into two NOT IN() expressions also failed - no records met the AND condition.

    WHERE TENT NOT IN (SELECT TENT FROM dandy) AND CANDY NOT IN (SELECT CANDY FROM dandy)
    

    However, concatenation did retrieve correct records.

    SELECT * FROM datasource        
    WHERE TENT & CANDY NOT IN (SELECT TENT & CANDY FROM dandy)