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