繁体   English   中英

使用子查询从两个不同的表中选择列 - 而不是连接

[英]Select columns from two different tables using a sub-query - not a join

我正在编写一个带有子查询的查询,看起来像这样

USE AP

SELECT VendorName, InvoiceDate, InvoiceNumber, InvoiceTotal
FROM Invoices AS main
WHERE InvoiceTotal >
    (SELECT MAX(InvoiceTotal)
     FROM Invoices AS sub
     WHERE VendorID = 121 AND sub.VendorID = main.VendorID)
ORDER BY VendorName, InvoiceTotal DESC

我在 vendorName 列下得到一个错误标记,因为它不在 Invoices 表中。 它在 Vendors 表中,但不允许我加入这两个表。 有没有办法在结果集中识别并提供该列?

有连接但没有结果

USE AP

SELECT VendorName, InvoiceDate, InvoiceNumber, InvoiceTotal
FROM Invoices AS main JOIN Vendors AS v
    ON main.VendorID = v.VendorID
WHERE InvoiceTotal >
    (SELECT MAX(InvoiceTotal)
     FROM Invoices AS sub
     WHERE VendorID = 121 AND sub.VendorID = main.VendorID)
ORDER BY VendorName, InvoiceTotal DESC

如果您真的不想使用连接,您可以尝试嵌套选择(不确定这是否正确)。
例如:

SELECT (SELECT v.VendorName FROM vendors v WHERE main.VendorID = v.VendorID) AS VendorName,
       main.InvoiceDate,
       main.InvoiceNumber,
       main.InvoiceTotal
FROM   Invoices AS main
...

没有连接,您可以像下面那样实现它:

USE AP
SELECT 
    (SELECT VendorName FROM vendors v where v.vendorid = main.vendorid) VendorName, 
    InvoiceDate, 
    InvoiceNumber, 
    InvoiceTotal
FROM Invoices AS main
WHERE InvoiceTotal >
    (SELECT MAX(InvoiceTotal)
     FROM Invoices AS sub
     WHERE VendorID = 121 )
ORDER BY VendorName, InvoiceTotal DESC

如果您在找到具有最大 InvoiceTotal 的发票后,请使用以下查询:

USE AP

SELECT 
    (SELECT VendorName FROM vendors v where v.vendorid = main.vendorid) VendorName, 
    InvoiceDate, 
    InvoiceNumber, 
    InvoiceTotal
FROM Invoices AS main
WHERE InvoiceTotal >=
    (SELECT MAX(InvoiceTotal)
     FROM Invoices AS sub
     WHERE sub.VendorID = main.VendorID)
ORDER BY VendorName, InvoiceTotal DESC

DB Fiddle 在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM