2016-01-21 2 views
0

Надеюсь, вы можете получить меня здесь. Я работаю над системой PMS, и я хочу запустить простой оператор SELECT, чтобы получить список секретных кодов для моих клиентов, основываясь на том, какая из их посылок и тип транзакции. «TransferConfirmation» таблица уже имеет идентификатор клиента и секретный код и отображает одну строку для каждого экземпляра, но по какой-то причине, когда я использую следующий запрос:Что не так с моим MySQL-запросом (UNION)?

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) 

Я продолжаю получать результаты с повторяющимися данными Разница лишь в том с транзакцией. Я думаю, мой вопрос в том, что если секретный код был выбран один раз, как мне запретить отображение какой-либо другой строки одного и того же кода.

+0

Пожалуйста, отформатируйте запрос. Он не читается. – Jens

+1

Это действительно нечитаемо, но он только хочет получить уникальные результаты, поэтому --- добавьте DISTINCT () на каждые , вы не хотите получать повторяющиеся значения. – user1234141515134321321513

+0

Извините за мой запрос. Будет ли вторая часть UNION также игнорировать дублирующий код с первого? – BrodaTherapy

ответ

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 ... 
+0

, который работает для каждой части UNION, но не для них. – BrodaTherapy

+0

@BrodaTherapy Используйте 'UNION' вместо' UNION ALL'. –

Смежные вопросы