0

私は SQL に非常に慣れていないため、SQL についてはあまり知りませんが、すぐに習得できます。問題が発生していない他のいくつかの列とともに、アイテム ID と手元の数量 (qoh) を含むデータベースがあります。問題は、qoh 列を含む item id 列を提供するように指示すると、qoh が異なるため、個々のアイテムごとに約 500 行が表示されるため、文字通り約 1,200 万行あることです。今、私が探しているのは、各アイテムの最新の数量です。これは 1 対多の関係であると想定していますが、私は SQL の初心者以下であるため、どこから始めればよいかさえわかりません。これは私がこれまでに持っているものです:

SELECT DISTINCT item_id, qty_on_hand
FROM database.inv_mast, database.inv_loc
ORDER BY item_id ASC

ああ、私は Microsoft SQL Server Management Studio を使用しています

ここに私が欲しいものがあります:

| item_id |qty_on_hand|
|123456789|   93      |
|456789123|   87      |
|789456123|   74      |

しかし、私が得ているのは次のとおりです。

| item_id |qty_on_hand|
|123456789|   85      |
|123456789|   82      |
|123456789|   92      |

データベースは、アイテムを取得してから文字通り毎秒qohが何であったかを教えてくれるため、同じitem_idを少なくとも4000回取得しています。クエリの実行時にウェアハウスにあるものだけが必要です。初心者で申し訳ありませんが、私は文字通り SQL を知りません。

4

2 に答える 2

3

「、」を使用するだけでクロス結合を行っています。あなたがする必要があるのは、私が思う内部結合です。

SELECT DISTINCT im.item_id, qty_on_hand
FROM database.inv_mast im
INNER JOIN database.inv_loc in on im.item_id = in.item_id
ORDER BY item_id ASC

また、左結合と右結合も確認する必要があります。

つまり、「,」を使用することは、クロス結合を使用するようなものです

これらのクエリを理解するには、結合について学ぶ必要があります。以下のサイトを参照してください。

http://www.w3schools.com/sql/sql_join.asp

于 2013-10-24T20:48:06.860 に答える