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

为什么我的SQL Server数据库为此查询返回多个值?,sql,sql-server,Sql,Sql Server,编辑:我修复了不匹配的查询和数据 我正在使用VisualBasic查询SQLServer数据库,试图创建一个程序来为客户端生成报告。他们已经有了报告生成软件,但它不能满足他们的需要。我试图在一个查询中连接来自3个不同表的数据,我已经从查询中删除了不相关的字段: SELECT lineitem.lineitemid, lineitem.cost, lineitem.sale, partitem.partitemid, partitem.lin

编辑:我修复了不匹配的查询和数据

我正在使用VisualBasic查询SQLServer数据库,试图创建一个程序来为客户端生成报告。他们已经有了报告生成软件,但它不能满足他们的需要。我试图在一个查询中连接来自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
如果从lineitem运行SELECT*,它将返回唯一值:

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的变体,但都没有用。由于数据类型冲突,联合无法工作,我需要特定表的唯一信息


旁注:我没有设计数据库,如果我设计过的话,我就不需要用这种方式查询3个不同的表来完成它们想要的任务。

谢谢大家的帮助。我和一个同事谈了谈,我们都明白了。正如你们中的一些人所建议的那样,这是一种1对n的关系。我想我不了解数据库。事实证明,每个LineItemId都与可能有多个部分与其关联的事务相关。我最终缩小范围的方式是按日期。最后一个查询与问题中的查询相同,但末尾附加了WHERE inventory transaction.orderdate>“某个日期”和“某个其他日期”。我还放弃了右边的外部连接,改为普通连接。现在,我必须将所有这些包装在一个可用的界面中,并将其发送给客户:

因为有多个inventorytransaction行与某些行项目匹配?我们需要知道表1:1、1:m……之间的关系。。。。也许,你有一个1:n在那里,你没有想到。这可能会导致重复和组合爆炸。请仔细研究一下什么是正确的外部连接,也许吧?这不可能是您查询中的示例。第三列与第一列不匹配,这两列都应该是行项目ID。我必须说,我不理解您使用RIGHT JOIN。我总是觉得他们很困惑。;你能用语言描述一下这个查询应该做什么吗?每一行应该代表什么?
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