为什么我的SQL Server数据库为此查询返回多个值?

时间:2014-05-14 14:19:30

标签: sql sql-server

已编辑:我修复了错误匹配的查询和数据

我正在使用Visual Basic查询SQL Server数据库,以尝试创建一个程序来为客户端生成报告。他们已经有报告生成软件,但它没有做他们想要的。我正在尝试在一个查询中连接来自3个不同表的数据,我想出了以下内容(我已从查询中删除了不相关的字段):

SELECT lineitem.lineitemid,
       lineitem.cost,
       lineitem.sale,
       partitem.partitemid,
       partitem.lineitemid,
       partitem.quantity,
       partitem.partid,
       part.partid,
       part.cost,
       part.description,
       inventorytransaction.partid,
       inventorytransaction.cost,
       inventorytransaction.orderdate
FROM   sm.lineitem  
       RIGHT OUTER JOIN sm.partitem 
         ON partitem.lineitemid = lineitem.lineitemid 
       RIGHT OUTER JOIN sm.part
         ON partitem.partid = part.partid
      RIGHT OUTER JOIN sm.inventorytransaction
         ON part.partid = inventorytransaction.partid
WHERE  lineitem.lineitemid > 62421 AND lineitem.lineitemid < 62442

问题是它为同一个id返回100+个值。以下是实际查询的示例:

62422   2.23    4.99    31964   1   2   OIL FILTER  2   12/10/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   10/20/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   9/1/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   8/26/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   8/13/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   7/2/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   6/4/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   5/20/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   4/29/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   3/19/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   2/25/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   1/29/2010 19:00
62422   2.23    4.99    31964   1   2   OIL FILTER  2   12/31/2009 19:00

如果我运行SELECT * from lineitem,则返回唯一值:

362440  25.44   -318715 -318715
362441  0   -318716 -318716
362442  15.96   -318717 -318717
362443  0   -318718 -318718
362444  13.5    -318719 -318719
362445  1.65    -318720 -318720
362446  0   -318721 -318721
362447  0   -318722 -318722
362448  0   -318723 -318723
362449  0   -318724 -318724

怎么了?您需要提供哪些其他信息才能回答这个问题?

我尝试了JOIN的几种变体无济于事。 UNION因数据类型冲突而无效,我需要特定表格所特有的信息。

旁注:我没有设计数据库,如果有的话,我不需要以这种方式查询3个不同的表来做他们想要的事情。

1 个答案:

答案 0 :(得分:0)

感谢帮助人员。我和一位同事交谈,我们发现了。这是一个与你建议的数量有一对一关系的情况。我想我不懂数据库。事实证明,每个LineItemId都与一个可能有多个与之关联的部件的事务相关。我最终缩小范围的方式是按日期。最终查询与问题中的查询相同,但最后查询WHERE inventorytransaction.orderdate > 'some-date' AND < 'some-other-date'。我也放弃RIGHT OUTER JOIN支持正常JOIN.现在我必须将所有这些包装在一个可用的界面中并将其发送给客户:)