mysql - sql 查询返回太多结果和重复项

标签 mysql sql

标题说明了一切。我正在查询我们的数据库,我得到了复制品以及太多的结果。它应该返回一个零件 ID 和一个单价。

    SELECT SHIPPER.SHIPPED_DATE, INVENTORY_TRANS.PART_ID, IT.QTY, CUST_ORDER_LINE.UNIT_PRICE FROM INVENTORY_TRANS 
JOIN INVENTORY_TRANS IT ON INVENTORY_TRANS.PART_ID = IT.PART_ID
        AND INVENTORY_TRANS.TRANSACTION_ID = IT.TRANSACTION_ID
JOIN CUST_ORDER_LINE ON IT.CUST_ORDER_ID = CUST_ORDER_LINE.CUST_ORDER_ID
        AND CUST_ORDER_LINE.LAST_SHIPPED_DATE = INVENTORY_TRANS.TRANSACTION_DATE
JOIN SHIPPER ON IT.CUST_ORDER_ID = SHIPPER.CUST_ORDER_ID
        AND CUST_ORDER_LINE.LAST_SHIPPED_DATE = SHIPPER.SHIPPED_DATE
        AND IT.TRANSACTION_DATE = SHIPPER.SHIPPED_DATE
WHERE SHIPPER.SHIPPED_DATE > '2016-05-01' AND SHIPPER.SHIPPED_DATE < '2016-06-01' 
ORDER BY IT.PART_ID

最佳答案

我认为这里不需要您的自加入INVENTORY_TRANS。将其剪下来并在 from 语句中使用 IT 或其他内容作为别名:

SELECT 
 SHIPPER.SHIPPED_DATE, 
 IT.PART_ID, 
 IT.QTY, 
 CUST_ORDER_LINE.UNIT_PRICE 
FROM INVENTORY_TRANS IT
JOIN CUST_ORDER_LINE 
 ON (IT.CUST_ORDER_ID = CUST_ORDER_LINE.CUST_ORDER_ID AND CUST_ORDER_LINE.LAST_SHIPPED_DATE = IT.TRANSACTION_DATE)
JOIN SHIPPER 
 ON (IT.CUST_ORDER_ID = SHIPPER.CUST_ORDER_ID AND CUST_ORDER_LINE.LAST_SHIPPED_DATE = SHIPPER.SHIPPED_DATE AND IT.TRANSACTION_DATE = SHIPPER.SHIPPED_DATE)
WHERE SHIPPER.SHIPPED_DATE > '2016-05-01' AND SHIPPER.SHIPPED_DATE < '2016-06-01' 
ORDER BY IT.PART_ID

关于mysql - sql 查询返回太多结果和重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37731829/

相关文章:

sql - datetime 的值始终为 nil

mysql - 查找具有相同列值的多行的 SQL 查询

php - 使用 PHP 在 XLS 中编辑数据然后导入到 mySQL

mysql - Kannel Sqlbox 不工作(尝试连接到 SQL Server 而不是 MySQL)?

mysql - 如何在选择或表格的每一行中执行过程

sql - 使用虚拟默认列取 SQL 平均值

sql - 使用 ON CONFLICT 从 INSERT 返回行而不需要更新

php - 如何添加选择不同?

mysql - 检查行是否存在以及是否不输出特定值

mysql - 基于 2 个 json 字段创建 View