1

불행히도 기본 / 외래 키 관계가 인코딩되지 않은 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 문을 제공 할 수 없습니다.

View design with 6 tables.내가 사용하고있는 코드 :

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가 있기 때문에 외국 - 일차 관계가 실패합니다. 매우 이상합니다.

1 답변


2

이 6 개의 테이블에서 모든 행을 다시 가져 오지 마십시오. 일부 테이블에 1 백만 이상의 행이있는 경우 최소한이 테이블 중 하나에 필터를 적용합니다 (예 : WHERE 절을 사용하는 CleanIventTrans 테이블). 기본 키와 외래 키를 추가하지 않으려면 성능 향상에 도움이되는 인덱스를 적어도 추가하십시오.


  • 그것의 내 데이터베이스, 자사의 역학 AX 데이터베이스, 대신 기본 / 외래 키 응용 프로그램 계층에 있다고 가정합니다. 내가 행을 걸러 내면 내 분석을 실행하는 데 필요한 데이터를 얻지 못할 것이다. 각자 ID를 만들 필요없이 기본 / 외래 키를 추가하는 방법을 모르겠다. - Tommy
  • 성능을 위해서는 데이터베이스 계층에 Primary / Foreign 키를 추가하는 것이 가장 좋습니다. 왜 한 번에 3350 만 행을 분석해야합니까? 외래 키를 추가하려면 실행할 수 있습니다. ALTER TABLE YourTable 외래 키 추가 (P_Id) 참조 태블릿 (필드) - Darren
  • 글쎄, 내가 뭘 하려는지 분석하려고하는 모든 관련 칼럼을 포함하는 테이블을 만드는 것입니다. 테이블이 지금까지 수행 된 방식은 30 밀 이상의 행을 가져 왔습니다. 그리고 나서 메모리가 부족합니다. 그래서 30 밀 행을 분석하고자하는 질문은 아니지만 테이블을 원하는 더 많은 욕구가 있습니다. 관련 칼럼으로 구성되어 있으며 불행히도 6 개의 서로 다른 테이블에 분산되어 있습니다. 두 테이블에 PF 관계를 추가했지만 판매 라인 및 발명 가능 제품으로 그렇게하려고 할 때 오류가 발생합니다. - Tommy
  • 귀하의 코드에서 dbo.AX_CUSTPACKINGSLIPJOUR 내부 조인 dbo.AX_SALESTABLE INNER JOIN을 (를) 사용하고 있음을 알았습니다. 내부 조인에서 JOIN, 즉 SALESID 필드를 지정하고이 행이 필터링되는지 확인하십시오. - Darren
  • 아, 좋아요, 저는 외국의 주요 핵심 관계와 그 일을 시작했습니다. 모든 것을 다 해냈다면, 최소한의 행과 리소스를 사용하여 모든 사람들을 어떻게 참여시켜야 하는지를 알아야합니다. 아쉽게도 각 조인에 참여할 필드를 배치해야합니다. - Tommy

연결된 질문


관련된 질문

최근 질문