如何修复此查询以获取此输出?

时间:2017-04-28 02:26:31

标签: sql-server

代码:

SELECT * 
FROM Vendors
WHERE EXISTS (SELECT Invoices.VendorID 
              FROM Vendors  
              WHERE Vendors.VendorID = Invoices.VendorID)

输出:

InvoiceID   VendorID    InvoiceNumber   InvoiceDate InvoiceTotal    PaymentTotal    CreditTotal TermsID InvoiceDueDate
0 ROWS RETURNED

我得到的错误信息是:

  

Msg 102,Level 15,State 1,Line 16
  ' VendorID'附近的语法不正确。

2 个答案:

答案 0 :(得分:0)

  SELECT * 
    FROM Vendors
    WHERE EXISTS (SELECT Invoices.VendorID 
                  FROM Invoices
                  WHERE Vendors.VendorID = Invoices.VendorID)

答案 1 :(得分:0)

首先,我们通常不使用“*”作为列列表,因为我们只应选择实际需要的列。不要养成坏习惯。由于我们不了解您的架构以及您尝试做什么(除了基本的不良执行查询),我们必须假设。

因此,我假设您有一个名为Invoices的表,并且您要选择与至少一个发票关联的所有供应商。这就是你如何表达别人可以理解的要求。

select * from dbo.Vendors as vd
where exists (select * from dbo.Invoices as iv where vd.VendorID = iv.VendorID)
order by vd.Name;

但是,它返回供应商信息而不是发票信息。您的“所需输出”显示发票信息 - 但它的确切含义尚不清楚。那么也许您可以打开上面的查询并从发票中选择?如果是这样,您可能根本不需要根据发布的输出加入供应商表。