开发的时候遇到一个问题,如下:
表中数据:
SQL如下:
select w.*,h.document_end_date,h.document_category,g.project_name AS projectName from (select a.id, a.project_guid, a.paper_guid AS personalPaperGuid, '自研科技' AS distinguish, a.paper_date AS paperDate, a.paper_title AS paperName, a.publication_type AS paperType, a.paper_number AS paperNumber, a.ranks AS ranks, a.author AS author, a.create_time AS createTime from tb_research_unit_paper a UNION ALL select b.id, b.project_guid, b.paper_guid AS personalPaperGuid, '在研科技' AS distinguish, b.paper_date AS paperDate, b.paper_title AS paperName, b.publication_type AS paperType, b.paper_number AS paperNumber, b.ranks AS ranks, b.author AS author, b.create_time AS createTime from tb_technology_unit_paper b) w left join (select e.project_name,e.project_guid FROM tb_research_project_info e UNION ALL SELECT project_name,project_guid FROM tb_technology_project_info )g ON w.project_guid = g.project_guid left join (select f.document_end_date,f.document_category,f.project_guid FROM tb_research_assessment_index f UNION ALL select document_end_date,document_category,project_guid FROM tb_technology_assessment_index) h ON w.project_guid = h.project_guid
运行结果如下:
可以看到SQL查询出多条重复性数据,但是数据库实际存储只有一条
产生原因:
一对多联表查询,生成笛卡尔积m*n,产生重复数据
解决方案:
第一种:DISTINCT去重
第二种:group by 分组(推荐使用,逻辑复杂DISTINCT之后可能仍然会存在重复数据)