我希望你能带我来这里。我正在开发一个 PMS 系统,我想运行一个简单的 SELECT 语句,根据客户的包裹已到达和交易类型来获取他们的密码列表。 “transferConfirmation”表已经具有客户 ID 和密码,并为每个实例显示一行,但由于某种原因,当我使用以下查询时:
SELECT `tc`.`transferID` AS `transferID`,
`c`.`firstName` AS `firstName`,
`c`.`lastName` AS `lastName`,
`tc`.`secretCode` AS `secretCode`,
'Purchase Order' AS `transactionType`
FROM (((((`db`.`transferconfirmation` `tc`
JOIN `db`.`customer` `c` on((`tc`.`customerID` = `c`.`customerID`)))
JOIN `db`.`transfer` `t` on((`t`.`transferID` = `tc`.`transferID`)))
JOIN `db`.`transferentry` `te` on((`t`.`transferID` = `te`.`transferID`)))
JOIN `db`.`purchaseorder` `po` on((`te`.`referenceID` = `po`.`purchaseOrderID`)))
JOIN `db`.`purchaseorderentry` `poe` on(((`po`.`purchaseOrderID` = `poe`.`purchaseOrderID`)
AND (`te`.`referenceEntryID` = `poe`.`purchaseOrderEntryID`))))
WHERE (`poe`.`collectionStatus` = 0)
UNION ALL
SELECT `tc`.`transferID` AS `transferID`,
`c`.`firstName` AS `firstName`,
`c`.`lastName` AS `lastName`,
`tc`.`secretCode` AS `secretCode`,
'Shipping Order' AS `transactionType`
FROM (((((`db`.`transferconfirmation` `tc`
JOIN `db`.`customer` `c` on((`tc`.`customerID` = `c`.`customerID`)))
JOIN `db`.`transfer` `t` on((`t`.`transferID` = `tc`.`transferID`)))
JOIN `db`.`transferentry` `te` on((`t`.`transferID` = `te`.`transferID`)))
JOIN `db`.`shippingorder` `so` on((`te`.`referenceID` = `so`.`shippingOrderID`)))
JOIN `db`.`shippingorderentry` `soe` on(((`so`.`shippingOrderID` = `soe`.`shippingOrderID`)
AND (`te`.`referenceEntryID` = `soe`.`shippingOrderEntryID`))))
WHERE (`soe`.`collectionstatus` = 0)
我不断得到重复数据的结果,唯一的区别在于交易。我想我的问题是,如果已选择一次密码,如何防止任何其他行显示相同的代码。
最佳答案
使用UNION
运算符。 UNION
运算符将从每个查询中删除重复记录(UNION ALL
将保留它们)。
SELECT transferID, firstName, lastName, secretCode,
'Purchase Order' AS transactionType
FROM ...
UNION
SELECT transferID, firstName, lastName, secretCode,
'Purchase Order' AS transactionType
FROM ...
关于mysql - 我的 MySQL 查询 (UNION) 有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34918310/