我有六个表,不幸的是没有任何主/外键关系编码。我试图创建一个视图,但是我只是对一张桌子感到满意。无法加入6表没有任何主键或外键 - 内存不足
我已经成功加入了六张表,但返回了3350万行(cleanInventtrans有170万行,每次添加更多表时,我假设这些表乘以前一个表的组合)内存不足。现在,我意识到这不是这样做的正确方式,如果这是我得到我假设的结果。
我在一对夫妇的问题,在网上看了
http://www.daniweb.com/web-development/databases/ms-sql/threads/123446/problem-using-join-with-six-tables
SQL joining 6 tables
Unable to relate two MySQL tables (foreign keys)
而且我已经看了
http://www.techonthenet.com/sql/joins.php
然而,他们假定有一个主 - 外关键的关系,我的表没有这个,但是在各个表之间有对应的字段,如下面的SQL代码所示。我使用这些来匹配表格,但是在某个地方,我显然做错了。
我明白,通过这样做,我基本上可以将结果与每个我加入的表相乘。我希望有一个更聪明/正确的方法来减少结果的数量到管理规模。
我很遗憾无法提供创建声明。
我使用的代码:
SELECT dbo.AX_SALESLINE.SALESID, dbo.AX_SALESLINE.ITEMID, dbo.AX_SALESLINE.QTYORDERED, dbo.AX_SALESLINE.SALESPRICE, dbo.AX_SALESLINE.LINEPERCENT,
dbo.AX_SALESLINE.LINEAMOUNT, dbo.AX_SALESLINE.SALESQTY, dbo.AX_SALESLINE.CONFIRMEDDLV, dbo.CleanInventTrans.COSTAMOUNTPOSTED,
dbo.CleanInventTrans.DATEPHYSICAL, dbo.AX_CUSTPACKINGSLIPJOUR.DELIVERYDATE, dbo.AX_SALESTABLE.CUSTACCOUNT, dbo.AX_SALESTABLE.SALESTYPE,
dbo.AX_SALESTABLE.SALESSTATUS, dbo.AX_CUSTPACKINGSLIPJOUR.QTY, dbo.AX_PRODTABLE.PRODID
FROM dbo.AX_CUSTPACKINGSLIPJOUR INNER JOIN
dbo.AX_SALESTABLE INNER JOIN
dbo.CleanInventTrans INNER JOIN
dbo.AX_INVENTTABLE ON dbo.CleanInventTrans.ITEMID = dbo.AX_INVENTTABLE.ITEMID INNER JOIN
dbo.AX_PRODTABLE ON dbo.AX_INVENTTABLE.ITEMID = dbo.AX_PRODTABLE.ITEMID INNER JOIN
dbo.AX_SALESLINE ON dbo.AX_INVENTTABLE.ITEMID = dbo.AX_SALESLINE.ITEMID ON dbo.AX_SALESTABLE.SALESID = dbo.AX_SALESLINE.SALESID ON
dbo.AX_CUSTPACKINGSLIPJOUR.SALESID = dbo.AX_SALESLINE.SALESID
编辑: Salesline和salestable可以通过P/F键有关,但inventtable和salesline没有超越有一个名为列的itemid的关系,两者都是一样的。但是这些都有重复,并且不能用作键。
EDIT2:
Salesline和inventtable不能出于某种原因有关:
'AX_INVENTTABLE' table saved successfully
'AX_SALESLINE' table
- Unable to create relationship 'FK_AX_SALESLINE_AX_INVENTTABLE'.
The ALTER TABLE statement conflicted with the FOREIGN KEY constraint "FK_AX_SALESLINE_AX_INVENTTABLE". The conflict occurred in database "VS1", table "dbo.AX_INVENTTABLE", column 'ITEMID'.
我已检查的itemid在inventtable,它是独一无二的,在salesline有多个条目标识的 - 但不是所有的身份证都是数字性的,有些包含字母。我不确定这是否是导致问题的原因。
编辑3:
外部主要关系失败,因为在salines中存在不存在于可发现表中的ID。很奇怪。
它不是我的数据库,它是一个Dynamics AX数据库,我假设主/外键在应用程序层中。 如果我筛选出行,我不会得到必要的数据来运行我的分析。我甚至不知道如何为此添加主键/外键,而不必为自己创建每个ID。 – Tommy 2012-03-28 07:58:25
为了提高性能,最好在数据库层添加主键/外键。为什么你一次需要分析3350万行? 要添加外键,你可以执行: ALTER TABLE YourTable 添加外键(P_ID) 参考TABLETOREFERENCE(场) – 2012-03-28 08:32:39
好吧,我所要做的是创建一个包含所有相关列的分析表我正在努力。到目前为止,表格的制作方式已经产生了超过3千万行,然后它的内存耗尽 - 所以它不是一个想要分析30万行数据的问题,而是希望得到一张表格的问题。由相关列组成,不幸的是分布在6个不同的表格中。 我添加了一个PF relationtion两个表,但是我试图用saleslines和inventtable – Tommy 2012-03-28 09:03:18