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