我似乎在基于SAGE数据库的以下查询中遇到了MS Access问题
以下代码不起作用 - 它不喜欢"不喜欢"部分
SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER
WHERE type = 'BP' and
deleted_flag= 0 and details NOT like "*WAGES*"
此代码确实有效,但速度非常慢,并且在将其链接到Excel时无法正常工作 -
参数expected = 1错误??
SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER
WHERE type = 'BP' AND deleted_flag= 0 and
details NOT IN (SELECT details from audit_header where details like "*WAGES*");
另外,奇怪的是,这段代码有效,但很明显,我想在细节中排除包含WAGES的交易
SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER
WHERE type = 'BP' and
deleted_flag= 0 and details like "*WAGES*"
答案 0 :(得分:1)
因为这有效:
SELECT tran_number, Inv_ref, Details, date, Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = 'BP' and
deleted_flag= 0 and details like "*WAGES*"
虽然上面确实有单引号和双引号的混合(提示:将来尝试使用计算机修复某些内容时 - 保持一致非常重要)。
上面跳出的唯一真实问题是日期是Access中的保留字。细节也是。因此,将[]括号放在上面的保留字
周围因此,您必须必须验证您声明的后续工作:
SELECT tran_number, Inv_ref, Details, date, Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = "BP" and
deleted_flag= 0 and details like "*WAGES*"
现在尝试使用括号中的保留字,如下所示:
SELECT tran_number, Inv_ref, Details, [date], Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = "BP" and
deleted_flag= 0 and [details] like "*WAGES*"
请注意[]约会日期和细节。
再次,测试上面的第二个例子。 如果以上工作,你和DOUBLE,和TRIPLE检查,那么这也应该工作:
SELECT tran_number, Inv_ref, Details, [date], Net_amount,
amount_paid FROM AUDIT_HEADER
WHERE type = "BP" and
deleted_flag= 0 and [details] NOT like "*WAGES*"
如果上述失败,那么SAGE系统很可能不支持“NOT”这样的命令。
请尝试使用WORKING查询中的[]。如果[]有效,则尝试将NOT添加到工作查询中。
答案 1 :(得分:0)
用户也会收到错误:
ODBC Call Failed - Syntax - Invalid filter in WHERE clause (#0)
如果您正在使用ODBC调用并从Access调用非Access数据库,则需要检查您的SQL是否适用于您调用的任何数据库。因此,如果您使用的是SQL服务器,则可以使用:
SELECT tran_number, Inv_ref, Details, date, Net_amount, amount_paid
FROM AUDIT_HEADER WHERE type = 'BP' and deleted_flag= 0 and details NOT LIKE '%WAGES%'
由于SQL使用单引号而不是双引号。这个引用点可能值得检查,因为你在“BP”周围使用了单引号,但在“* WAGE *”附近翻了一倍。另外,外卡是百分比符号。您可能希望针对您使用的任何数据库进行检查。
答案 2 :(得分:0)
and NOT (details like "*WAGES*")
作为旁注,字符串开头的通配符将变慢。