私がやっていることは、MySQLがテーブルの主キーによって重複した行を選択するのを防ぐことです。LEFT JOINを使用したMySQL DISTINCTクエリは、プライマリキーで複製された行を選択します。
データは実際のものではなく、質問のためのものです。
prospect_evaluations
id | category | archived_at | discarded_at | hidden_at
1 | to_contact | null | null | null
2 | to_contact | null | null | null
3 | to_convert | null | null | null
4 | to_convert | null | null | null
prospect_evaluations_actions
id | evaluation_id | created_at
1 | 1 | 01-02-2017 01:00:00
2 | 1 | 01-02-2017 02:00:00
3 | 2 | 01-02-2017 03:00:00
SELECT prospect_evaluations.*,
prospect_evaluations_actions.evaluation_id,
prospect_evaluations_actions.created_at AS lastaction_created_at
FROM `prospect_evaluations`
LEFT JOIN `prospect_evaluations_actions` ON `prospect_evaluations_actions`.`evaluation_id` = `prospect_evaluations`.`id`
WHERE `prospect_evaluations`.`category` = 'to_contact'
AND `archived_at` IS NULL
AND `discarded_at` IS NULL
AND `prospect_evaluations`.`hidden_at` IS NULL
ORDER BY IFNULL(CAST(prospect_evaluations_actions.created_at AS date), CAST(prospect_evaluations.created_at AS date)) DESC, `prospect_evaluations`.`priority` DESC
クエリの結果は何ですか?
id | category | archived_at | discarded_at | hidden_at | lastaction_created_at
1 | to_contact | null | null | null | 01-02-2017 01:00:00
1 | to_contact | null | null | null | 01-02-2017 02:00:00
2 | to_contact | null | null | null | 01-02-2017 03:00:00
私が代わりに何をしたいですか?
id | category | archived_at | discarded_at | hidden_at | lastaction_created_at
1 | to_contact | null | null | null | 01-02-2017 02:00:00
2 | to_contact | null | null | null | 01-02-2017 03:00:00
EDIT:評価は歴史の中で4つのアクションがあった場合、それはつもり4回複製されているように私は、彼らが評価にリンクされているどのように多くのアクションに応じて、結果が重複していることに気付きました。私は創造日を選択してそれを使って自分のエントリーを注文できるように、最後のアクションだけが必要です!表2のジョインTABLE1の
- SELECT
- LEFT:
EDIT 2:この質問は、で構成されているため、このような状況、可能性の重複としてフラグ付けされたものと比較しては、異なっています。
重複質問ではなく、から構成されています。TABLE1の
- SELECT
- LEFTは、あなただけの最後のアクションをしたい場合は、あなたがそう指定する必要がTABLE1
クエリと結果セットの列数が同じではありません。あなたは列がありません。 FYI DISTINCTは個々の列または主キーではなく、行レベルで作業しています。 – Pred
@Pred結果セットを固定してより理にかなっているようにしました。代わりにCOLUMNレベルで動作させるにはどうすればよいですか?または、LEFT JOINの結果を1に制限するにはどうすれば問題が発生するのですか? – GiamPy
今は複製されていますか? – Pred