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

标签 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 表中的行, 但还有每个库存商品的价格(订购日期和时间范围内的价格 - 取自 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/

相关文章:

sql - Entity Framework 、通用存储库模式和奇怪的 SQL 生成

mysql - 操作与限制同时加入

mysql - Left Join 与三个表的行为不符合预期

php - 如何显示特定的字段名称?

sql - 在 MySQL 中更改列名

SQL 成对计数元素

需要 PHP/MYSQL 查询帮助

MySQL 查询 2 个表在旁边加入列

MySql 查询以检查两个日期之间每天发生的事件?

php - 仅从数据库中获取时间戳日期