【问题标题】:SQL Join with line itemsSQL Join 与行项目
【发布时间】:2015-09-09 13:52:15
【问题描述】:

我需要将发票表加入许可证表。

每个许可证都有一张发票,但一张发票可以有多个行项目。因此,许可证 X 可以具有包含行项目 1 和 2 的发票 Y(行项目创建单独的行)。

如果我尝试像这样将许可证表加入发票表:

SELECT *
FROM table.Invoice I LEFT JOIN table.License L    
ON I.ClientID = L.ClientID;

某些行重复信息,但针对不同的许可证。这些行是唯一的,但它们不正确。因此,例如,这些将是我的错误结果:

Invoice #: 1 LicenseID: X Line item: 1    
Invoice #: 1 LicenseID: Y Line item: 1    
Invoice #: 2 LicenseID: X Line item: 1    
Invoice #: 2 LicenseID: Y Line item: 1    
Invoice #: 2 LicenseID: X Line item: 2    
Invoice #: 2 LicenseID: Y Line item: 2

真正的结果应该是这样的:

Invoice #: 1 LicenseID: X Line item: 1    
Invoice #: 2 LicenseID: Y Line item: 1    
Invoice #: 2 LicenseID: Y Line item: 2

有谁知道我怎样才能达到这些结果?我怎样才能加入这两个表(clientID 是他们唯一的共同点),这样我就不会得到重复的信息?

【问题讨论】:

  • 请提供表结构并详细说明您的第一个结果集如何不正确,第二个结果集如何正确?您根据什么将 6 个结果压缩为 3 个结果?
  • 表结构是这样的:INVOICE: InvoiceID, Invoice#, Line item, ClientID。 LICENSE 表具有以下行:LicenseID、ClientID。第一组结果不正确,因为许可证 Y 与发票 #2 匹配。许可证 X 与发票 #1 匹配。发票 #2 有两个行项目,每个行项目都有自己的行。我正在匹配 ClientID 上的表
  • 我认为您的查询没有问题:sqlfiddle.com/#!9/70bb1/2。很确定问题出在您的数据上。所以对于每个不同的lineItem,你都有相同的invoiceid, invoiceN and clientId ??为什么需要 2 列 InvoiceIdInvoice #
  • Alex,我确实认为数据有问题。但我正在寻找一种无需更改数据结构即可创建数据源的方法
  • 您正在寻找无法正确描述的东西

标签: mysql join


【解决方案1】:

只是一个随机猜测,你要求DISTINCT

SELECT DISTINCT *
FROM table.Invoice I LEFT JOIN table.License L    
ON I.ClientID = L.ClientID;

【讨论】:

  • 问题是,行是不同的。如果您查看第一组结果,这些行是唯一的,但它会将每个许可证与客户拥有的每张发票匹配,即使发票和许可证不匹配也是如此。不过感谢您的回答。
猜你喜欢
  • 2015-01-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多