私は6つのテーブルを持っていますが、残念ながらプライマリ/外部キーリレーションはエンコードされていません。私はビューを作成しようとしました、しかし私はテーブルだけで満足以上です。
6つのテーブルを結合することに成功しましたが、3350万行を返した後(cleanInventtransには170万行あり、テーブルが追加されるたびに、テーブルに前のテーブルの組み合わせが掛けられると仮定しています) 。さて、これが正しいやり方ではないことを私は理解しています。
オンラインでいくつか質問を見ました
http://www.daniweb.com/web-development/databases/ms-sql/threads/123446/problem-using-join-with-six-tables
6つのテーブルを結合するSQL
2つの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
編集する セールスラインとセールステーブルはP / Fキーで関連付けることができますが、inventorytableと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'.
私はinventableでitemidをチェックしました、それはユニークです、そしてセールスラインにitemidの多数があります - しかし、すべてのIDが本質的に数字であるというわけではなく、文字を含むものもあります。これがまだ問題の原因となっているかどうかはわかりません。
編集3:
生理食塩水にインベントリに存在しないIDがあるため、外部とプライマリの関係は失敗します。非常に奇妙な。
これら6つのテーブルからすべての行を取り戻さないでください。一部のテーブルに100万を超える行がある場合は、少なくともこれらのテーブルの1つ、つまりWHERE句を使用したCleanIventTransテーブルをフィルタ処理します。主キーと外部キーを追加しない場合は、少なくともパフォーマンスを向上させるためにインデックスを追加してください。