不支持SQL-Join表达式

不支持SQL-Join表达式,sql,ms-access,Sql,Ms Access,我刚刚使用Access并尝试更改此查询: SELECT DateDiff("d", [Invoice]![TxnDate],[ReceivePaymentLine]![TxnDate]) AS ActualPaymentDays, IIF ([ActualPaymentDays] < 90, 0.10, IIF ([ActualPaymentDays] < 120, 0.09, IID ([ActualPaymentDays] , 365, 0.05, 0))) AS

我刚刚使用Access并尝试更改此查询:

SELECT 
   DateDiff("d", [Invoice]![TxnDate],[ReceivePaymentLine]![TxnDate]) AS ActualPaymentDays, 
   IIF ([ActualPaymentDays] < 90, 0.10, IIF ([ActualPaymentDays] < 120, 0.09, IID ([ActualPaymentDays] , 365, 0.05, 0))) AS PayPerValue
FROM 
   ReceivePaymentLine 
INNER JOIN 
   Invoice ON ReceivePaymentLine.AppliedToTxnTxnID = Invoice.TxnID
我将上面的查询更改为此查询:

SELECT 
    DateDiff("d",[Invoice]![TxnDate],[ReceivePaymentLine]![TxnDate]) AS ActualPaymentDays, 
    IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay1],[ActualPaymentDaysRate.PayPerValue1], IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay2], [ActualPaymentDaysRate.PayPerValue2], IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay3],[ActualPaymentDaysRate.PayPerValue3], 0))) AS PayPerValue
FROM 
    ActualPaymentDaysRate, ReceivePaymentLine 
INNER JOIN 
    Invoice ON ReceivePaymentLine.AppliedToTxnTxnID = Invoice.TxnID

它显示错误连接表达式不受支持

不能混合使用旧样式和新样式的联接语法

添加另一个联接:

SELECT DateDiff("d",[Invoice]![TxnDate],[ReceivePaymentLine]![TxnDate]) AS ActualPaymentDays, IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay1],[ActualPaymentDaysRate.PayPerValue1],IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay2],[ActualPaymentDaysRate.PayPerValue2], IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay3],[ActualPaymentDaysRate.PayPerValue3], 0))) AS PayPerValue
FROM ReceivePaymentLine
INNER JOIN Invoice ON ReceivePaymentLine.AppliedToTxnTxnID = Invoice.TxnID
JOIN ActualPaymentDaysRate ON {some condition}

另外,在查询中,您将JOIN拼写为JON。我在这篇文章中纠正了这一点。

您所犯的错误是使用ANSI SQL-89语法和ANSI SQL-92语法进行连接

内部联接的旧语法是ansisql-89,在该语法中,您可以指定两个以逗号分隔的表名,在查询中这样做

SELECT <column list>
FROM ActualPaymentDaysRate, ReceivePaymentLine 
但不能在同一查询中同时使用它们。 在查询中有三个表,因此使用三个内部联接来链接这些表

不建议使用ANSI SQL-89语法,因为如果忘记连接条件,则不会生成错误,而是在返回所有行的表之间应用笛卡尔乘积

SELECT <column list>
FROM ActualPaymentDaysRate, ReceivePaymentLine 
--  WHERE <condition> excluded , NOT a INNER JOIN anymore but still no error

但如果您忘记了SQL-92语法中的条件,则会立即生成错误。

您的问题是您在内部联接中指定了两个表名,您需要两个内部联接来联接3个表

看这个

SELECT DateDiff("d",[Invoice]![TxnDate],[ReceivePaymentLine]![TxnDate]) AS ActualPaymentDays, 
IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay1],[ActualPaymentDaysRate.PayPerValue1],
IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay2],[ActualPaymentDaysRate.PayPerValue2], 
IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay3],[ActualPaymentDaysRate.PayPerValue3], 0))) AS PayPerValue
FROM ActualPaymentDaysRate INNER JOIN ReceivePaymentLine 
ON <Match Condition>
INNER JOIN Invoice 
ON ReceivePaymentLine.AppliedToTxnTxnID = Invoice.TxnID

也许是因为JON与内部连接无关?谢谢你的回复。我确实在访问中键入了JOIN,并显示了该错误。很抱歉,我在这个论坛上输入JON时出错。我在没有internet连接的其他计算机上使用Microsoft Access工作,这就是我无法复制和粘贴查询的原因。问题是:不确定如何在{some condition}上创建查询。ActualPaymentDaysRate表只有一条记录,ActualPaymentDay1、ActualPaymentDay2、ActualPaymentDay3字段与DateDiffd、[Invoice]相关![TXN日期],[ReceivePaymentLine]![TxnDate]实际支付天数。我想把ActualPaymentDays的IF条件设置为dynamic IF Now感谢您的帮助。但ActualPaymentDaysRate和其他表之间没有匹配键。ActualPaymentDaysRate表只有一条记录,ActualPaymentDay1、ActualPaymentDay2、ActualPaymentDay3字段与DateDiffd、[Invoice]相关![TXN日期],[ReceivePaymentLine]![TxnDate]实际支付天数。我想让动态IF现在成为ActualPaymentDays的IF条件。谢谢你的解释。知道如何解决我的问题吗?谢谢
SELECT <column list>
FROM ActualPaymentDaysRate, ReceivePaymentLine 
--  WHERE <condition> excluded , NOT a INNER JOIN anymore but still no error
SELECT DateDiff("d",[Invoice]![TxnDate],[ReceivePaymentLine]![TxnDate]) AS ActualPaymentDays, 
IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay1],[ActualPaymentDaysRate.PayPerValue1],
IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay2],[ActualPaymentDaysRate.PayPerValue2], 
IIF ([ActualPaymentDays] < [ActualPaymentDaysRate.ActualPaymentDay3],[ActualPaymentDaysRate.PayPerValue3], 0))) AS PayPerValue
FROM ActualPaymentDaysRate INNER JOIN ReceivePaymentLine 
ON <Match Condition>
INNER JOIN Invoice 
ON ReceivePaymentLine.AppliedToTxnTxnID = Invoice.TxnID