SQL脚本未加入结果

时间:2016-02-25 18:36:25

标签: sql

我遇到一个问题,让这个SQL脚本将两个表连接在一起,我可以执行它,它会显示第一部分的结果(AccountID,AuditDate ..etc),但它不会加入内部选择声明。

我通过抽查验证了数据库中存在匹配的数据。

我搞砸了哪一部分?

Select AccountID, AuditDate, SourceVersion
From Audit
Left join (
    Select A.PrinterAuditID, A.AuditID, A.SerialNr, A.PageCountTotal,a.PageCountColor, A.PageCountMono
    from  InvalidPrinterAudit A
    where A.DeviceID = 90757
) InvalidPrinterAudit on InvalidPrinterAudit.AuditID = Audit.AuditID

2 个答案:

答案 0 :(得分:2)

这里发生了一些事情。

一个:为了在结果集中包含字段,它们必须包含在查询的SELECT部分中:

Select AccountID, AuditDate, SourceVersion, InvalidPrinterAudit.PrinterAuditID, InvalidPrinterAudit.AuditID, InvalidPrinterAudit.SerialNr, InvalidPrinterAudit.PageCountTotal,InvalidPrinterAudit.PageCountColor, InvalidPrinterAudit.PageCountMono
    From Audit
    Left join (
        Select A.PrinterAuditID, A.AuditID, A.SerialNr, A.PageCountTotal,a.PageCountColor, A.PageCountMono
        from  InvalidPrinterAudit A
        where A.DeviceID = 90757
    ) InvalidPrinterAudit on InvalidPrinterAudit.AuditID = Audit.AuditID

两个:您不需要在此处拥有子查询。如果你需要从一个单独的表或其他东西聚合结果,子查询是很好的,但在这里你可以使用LEFT OUTER JOIN并完成它。

Select AccountID, AuditDate, SourceVersion, InvalidPrinterAudit.PrinterAuditID, InvalidPrinterAudit.AuditID, InvalidPrinterAudit.SerialNr, InvalidPrinterAudit.PageCountTotal,InvalidPrinterAudit.PageCountColor, InvalidPrinterAudit.PageCountMono
    From Audit
    Left OUTER JOIN InvalidPrinterAudit 
        ON InvalidPrinterAudit.AuditID = Audit.AuditID 
           AND InvalidPrinterAudit.DeviceID = 90757

这将在应用加入之前将DeviceID = 90757过滤器应用于您的InvalidPrinterAudit,这样您仍然可以获取所有Audit条记录,然后只获取InvalidPrinterAudit匹配的DeviceID的记录。

答案 1 :(得分:0)

您在外部查询中选择的内容少于内部查询中的列。

如果希望在结果集中返回它们,请将它们包含在外部:

Select AccountID, AuditDate, SourceVersion, PrinterAuditID, SerialNr
From Audit
Left join (
    Select A.PrinterAuditID, A.AuditID, A.SerialNr, A.PageCountTotal,a.PageCountColor, A.PageCountMono
    from  InvalidPrinterAudit A
    where A.DeviceID = 90757
) InvalidPrinterAudit on InvalidPrinterAudit.AuditID = Audit.AuditID