网站为什么会查询出重复数据,如何解决SQL语句查询出现多余重复数据? - 程序员中文网-程序员中文网 网站为什么会查询出重复数据,如何解决SQL语句查询出现多余重复数据? - 程序员中文网-程序员中文网
欢迎光临
我们一直在努力

网站为什么会查询出重复数据,如何解决SQL语句查询出现多余重复数据?

一、背景
在使用左连接查询left join时,有时会出现同等查询条件下单查左表是两条数据,左连接右表后多出两条数据变成4条。根本原因是当左表和右表是1对1关系时,左右表数据匹配,数据条数和左表相同,当左表和右表出现1对多的情况时,左表的一条数据可以对应右表的多条数据,此时右表为了匹配左表的每条数据就会多出数据,此时左表的就会出现重复相同的数据。

    连接查询数据
    SELECT up.*,ad.is_state FROM wei_up up  left join addticket ad on up.id = ad.pid  where  up.uid= 15 and up.hid=7930 ORDER BY up.po DESC,up.lshu DESC,up.id DESC   LIMIT  0,25

问题出现的原因:
MySQL left join 语句格式为: A LEFT JOIN B ON 条件表达式

left join 是以A表为基础,A表即左表,B表即右表。

左表(A)的记录会全部显示,而右表(B)只会显示符合条件表达式的记录,如果在右表(B)中没有符合条件的记录,则记录不足的地方为NULL。

使用left join, A表与B表所显示的记录数为 1:1 或 1:0,A表的所有记录都会显示,B表只显示符合条件的记录。
但如果B表符合条件的记录数大于1条,就会出现1:n的情况,这样left join后的结果,记录数会多于A表的记录数。
所以解决办法 都是从一个出发点出发,使A表与B表所显示的记录数为 1:1对应关系。

SELECT DISTINCT(up.id), up.*,ad.is_state FROM `wei_up` up  left join `addticket` ad on up.id = ad.pid  where  up.uid= 15 and up.hid=7930 ORDER BY up.po DESC,up.lshu DESC,up.id DESC   LIMIT  0,25
赞(0)
未经允许不得转载:程序员中文网 » 网站为什么会查询出重复数据,如何解决SQL语句查询出现多余重复数据?
手机电脑