与许多列的一对多关系

时间:2013-10-24 20:40:47

标签: mysql sql sql-server one-to-many

我对SQL非常陌生并且对此知之甚少,但我学得很快。我有一个数据库,其中包含项目ID和手头数量(qoh)以及其他一些我没有遇到问题的列。问题是,当我告诉它给我带有qoh列的项目id列时,它为每个单独项目提供了近500行,因为qoh是不同的所以我确实有大约1200万行。现在,我要找的是每个项目的最新数量。我假设这是一对多的关系,因为我低于SQL的noobie,我甚至不知道从哪里开始。这就是我到目前为止所做的:

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      |

我得到相同的item_id至少4000次,因为数据库正在告诉我自从我们有了这个项目后每秒钟的qoh是什么。我只想要在运行查询时仓库中的内容。我为所有的noobness道歉,但我确实不知道SQL。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

来自子句FROM database.inv_mast, database.inv_loc创建了笛卡尔积。使用WHERE条件缩小范围。