我有一个具有以下结构的数据库: http://i.imgur.com/DFZz3Py.png
我正在尝试运行一个select语句,从多个表中获取信息,但它不断给我带来重复的结果。我正在使用的声明是:
SELECT StockReceipts.StockID, StockReceipts.Quantity, StockPriceHistory.Price
FROM StockReceipts,StockPriceHistory,Receipts
WHERE (Receipts.ReceiptID = 1) AND (Receipts.OrderDate BETWEEN StockPriceHistory.DateStart AND StockPriceHistory.DateEnd)
我得到的结果是: http://i.imgur.com/2ZrgYyZ.png
我真正想要的是匹配stockreceipts表中的行, 但是,每个库存的价格(订购日期和时间内的价格 - 从收据表中取得的OrderDate)也取自StockPriceHistory表。我不明白为什么当StockReceipts表中只有两行用于该收据时,它正在组成重复/不正确的行。
有人可以帮忙吗?感谢
答案 0 :(得分:1)
SELECT
SR.StockID,
SR.Quantity,
SPH.Price
FROM
Receipts R
JOIN StockReceipts SR
on R.ReceiptID = SR.ReceiptID
JOIN StockPriceHistory SPH
on SR.StockID = SPH.StockID
WHERE
R.ReceiptID = 1
AND R.OrderDate BETWEEN SPH.DateStart AND SPH.DateEnd
表之间没有JOIN条件,只留下笛卡尔结果...对于每一个记录,从所有其他表行中抓取条目。