불행히도 기본 / 외래 키 관계가 인코딩되지 않은 6 개의 테이블이 있습니다. 나는보기를 만들려고 노력했지만, 나는 단지 탁자에 만족합니다.
나는 6 개의 테이블을 관리했지만, 3350 만 개의 행을 반환 한 후에 (cleanInventtrans는 170 만 개의 행을 가지고 있고 더 많은 테이블이 추가 될 때마다 테이블에 이전 테이블의 조합이 곱해 졌다고 가정합니다) 메모리가 부족합니다 . 자, 나는 이것이 올바른 일이 아니라는 것을 깨닫습니다. 만약 내가 그 결과를 얻으려고한다면 나는 그것을 추측합니다.
나는 온라인에서 몇 가지 질문을 봤어.
http://www.daniweb.com/web-development/databases/ms-sql/threads/123446/problem-using-join-with-six-tables
SQL에 6 개의 테이블 조인
두 개의 MySQL 테이블 (외래 키)을 연결할 수 없습니다.
그리고 나는 보았다.
http://www.techonthenet.com/sql/joins.php
그러나, 그들은 일차적 인 외래 키 관계가 있다고 가정하고, 내 테이블에는이 테이블이 없지만 아래의 SQL 코드에서 볼 수 있듯이 여러 테이블 사이에 일치하는 필드가 있습니다. 나는 테이블을 맞추기 위해 이것들을 사용한다. 그러나 어딘가에 선을 따라 분명하게 잘못하고있다.
이런 식으로하면 결과적으로 결과를 곱하는 각 테이블에 곱하는 것을 이해합니다. 나는 결과를 관리 크기로 줄이는 더 영리하고 정확한 방법이 있기를 바랬다.
불행히도 create 문을 제공 할 수 없습니다.
내가 사용하고있는 코드 :
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-keys를 통해 관련 될 수 있지만 inventable과 salesline은 itemid라는 컬럼을 가지고있는 관계를 가지고 있지 않습니다. 그러나 이것들은 중복되어있어 열쇠로서 기능하지 않습니다.
편집 2 :
영업망과 발명품은 어떤 이유로 든 관련 될 수 없습니다.
'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'.
나는 inventtable에서 itemid를 확인했습니다. 그것은 독특합니다. salesline에 itemid가 여러 개 있습니다. 그러나 모든 ID가 본질적으로 숫자가 아니며, 일부는 문자를 포함합니다. 이 문제가 아직 발생하고 있는지 확실하지 않습니다.
편집 3 :
발명품에 존재하지 않는 염분의 ID가 있기 때문에 외국 - 일차 관계가 실패합니다. 매우 이상합니다.
이 6 개의 테이블에서 모든 행을 다시 가져 오지 마십시오. 일부 테이블에 1 백만 이상의 행이있는 경우 최소한이 테이블 중 하나에 필터를 적용합니다 (예 : WHERE 절을 사용하는 CleanIventTrans 테이블). 기본 키와 외래 키를 추가하지 않으려면 성능 향상에 도움이되는 인덱스를 적어도 추가하십시오.