【问题标题】:Append query not working Access 2016附加查询不起作用 Access 2016
【发布时间】:2018-10-20 12:58:36
【问题描述】:

我正在为大学建立一个牙医预约系统。我已经构建了整个东西,直到昨天它工作正常。

我有一个附加查询,我想从 tblOperation_Schedule 中附加 Operation_ID、Treatment_ID 和 Patient_ID,其中 Op_Complete = 1 并且 Operation_ID 在发票表中尚不存在。

由于某种原因,行没有附加,但我无法发现问题。我一直在看它,试图想出另一种应该写的方式,但我绝不是专家,并且可以看到问题。在下面查询。

INSERT INTO tblInvoices 
( Treatment_ID, Operation_ID, Patient_ID )

SELECT 
tblOperation_Schedule.Treatment_ID, 
tblOperation_Schedule.Operation_ID, 
tblOperation_Schedule.Patient_ID

FROM tblOperation_Schedule 
INNER JOIN tblInvoices ON 
tblOperation_Schedule.Operation_ID = tblInvoices.Operation_ID
WHERE 
(((tblOperation_Schedule.Operation_ID) Not In (Select [Operation_ID] 
from tblInvoices)) 
AND 
(((tblOperation_Schedule.Op_Complete)="1"));

是否有人能够发现此问题或提出其他可能无法正常工作的原因?谢谢!

【问题讨论】:

    标签: sql ms-access ms-access-2016


    【解决方案1】:

    您的问题是您使用Operation_ID 为两个表创建INNER JOIN,然后在WHERE 中检查tblOperation_Schedule.Operation_ID NOT IN ANY Operation_ID FROM tblInvoices。因此,您的 WHERE 条件与您的 JOIN 条件冲突,并且不会产生任何回报。

    至少您应该将查询更改为:

    INSERT INTO tblInvoices 
        ( Treatment_ID, Operation_ID, Patient_ID )
    SELECT Treatment_ID, 
        Operation_ID, 
        Patient_ID
    FROM tblOperation_Schedule 
    WHERE
        Operation_ID NOT IN (
            SELECT [Operation_ID] 
            FROM tblInvoices
        )
        AND Op_Complete = "1";
    

    【讨论】:

    • 尤里卡!!!我不敢相信那是什么。这当然是有道理的,这是一个很好的教训!我花了很长时间盯着它,试图弄清楚我们哪里出了问题。也许这就是问题。盯着太久!谢谢一堆范
    • 请注意,NOT EXISTS 对于子查询通常比 NOT IN 更受欢迎,因为它通常具有更好的性能(它被优化为 ANTI JOIN,而不是查询列表并与每个列表进行比较行),并且因为如果表包含任何空值,NOT IN 将失败。
    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 2020-11-04
    • 2016-07-23
    • 1970-01-01
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多