从多表SELECT语句返回的结果无效

时间:2013-12-04 14:57:53

标签: mysql sql select join

我有一个具有以下结构的数据库: 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表中只有两行用于该收据时,它正在组成重复/不正确的行。

有人可以帮忙吗?感谢

1 个答案:

答案 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条件,只留下笛卡尔结果...对于每一个记录,从所有其他表行中抓取条目。