我对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。
答案 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
您还应该查看左右连接。
所以在总结中使用“,”就像使用交叉连接
您确实需要学习联接以了解这些查询,请查看以下网站。
答案 1 :(得分:1)
来自子句FROM database.inv_mast, database.inv_loc
的创建了笛卡尔积。使用WHERE
条件缩小范围。