我有一个具有以下结构的数据库: 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 表中的行, 但还有每个库存商品的价格(订购日期和时间范围内的价格 - 取自 Receipts 表的 OrderDate),取自 StockPriceHistory 表。我不明白为什么当 StockReceipts 表中只有两行该收据时它会组成重复/不正确的行。
有人可以帮忙吗?谢谢
最佳答案
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 条件,使其成为笛卡尔结果...对于其中的每条记录,从所有其他表行中获取条目。
关于mysql - 从多表 SELECT 语句返回无效结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378628/