标题说明了一切。我正在查询我们的数据库,我得到了复制品以及太多的结果。它应该返回一个零件 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/