Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 左连接和复制结果_Mysql_Sql - Fatal编程技术网

Mysql 左连接和复制结果

Mysql 左连接和复制结果,mysql,sql,Mysql,Sql,我有一个sql语句,如下所示: SELECT s.sp_id,s.synopsis,s.logline,s.user_id,s.bin_status,s.sp_order,s.sp_down_count,s.sp_name, `users`.firstname as `firstname`,`users`.lastname as `lastname`,s.status, `users`.email as `email`,`users`.p

我有一个sql语句,如下所示:

    SELECT  s.sp_id,s.synopsis,s.logline,s.user_id,s.bin_status,s.sp_order,s.sp_down_count,s.sp_name,
            `users`.firstname as `firstname`,`users`.lastname as `lastname`,s.status,
            `users`.email as `email`,`users`.phone as `phone`,`users`.address1 as `address1`,
            `users`.address2 as `address2`,`users`.`r_group`, view_coverages.grade,coverages.comments  

    FROM s 
    LEFT JOIN `users` ON `users`.user_id=s.user_id  
    LEFT JOIN view_coverages ON view_coverages.sp_id=s.sp_id 
    LEFT JOIN `coverages` ON `coverages`.sp_id=s.sp_id  

    WHERE $email_filter lower(s.synopsis) like '%$search_word_fix%'
    OR lower(s.sp_name) like '%$search_word_fix%'
    OR lower(s.logline) like '%$search_word_fix%'
     OR lower(coverages.comments) like '% $search_word_fix %'
    ORDER BY view_coverages.grade DESC
当我显示结果时,我会得到很多重复的结果。 我想在s.sp_名称不重复的地方显示搜索结果。

您有两个选项:

  • 通过将
    Select
    更改为
    selectdistinct
    ,仅选择唯一的、不重复的结果
  • 按s.sp_name分组
    ,但您需要对正在选择的所有其他字段执行聚合函数
  • 由于我确信您不能平均或合计一个人的姓名、地址、电话号码等,您可能应该尝试选项1(
    选择DISTINCT
    )。如果在重复的行中有一个非唯一字段,则需要按分组除唯一字段外的每个字段;在剩余的唯一字段上使用聚合函数(即,
    SUM
    AVG
    等)。

    SELECT  s.sp_id,s.synopsis,s.logline,s.user_id,s.bin_status,s.sp_order,s.sp_down_count,s.sp_name,
                `users`.firstname as `firstname`,`users`.lastname as `lastname`,s.status,
                `users`.email as `email`,`users`.phone as `phone`,`users`.address1 as `address1`,
                `users`.address2 as `address2`,`users`.`r_group`, view_coverages.grade,coverages.comments  
    
        FROM s 
        LEFT JOIN `users` ON `users`.user_id=s.user_id  
        LEFT JOIN view_coverages ON view_coverages.sp_id=s.sp_id 
        LEFT JOIN `coverages` ON `coverages`.sp_id=s.sp_id  
    
        WHERE $email_filter lower(s.synopsis) like '%$search_word_fix%'
        OR lower(s.sp_name) like '%$search_word_fix%'
        OR lower(s.logline) like '%$search_word_fix%'
         OR lower(coverages.comments) like '% $search_word_fix %'
      ADD --->       group by s.sp_name  
        ORDER BY view_coverages.grade DESC
    

    结果中会出现重复,因为某些地方的数据没有唯一的联接。为了找到(这样就可以更正),我们需要一些样本数据和结果,可能还有您想要实现的功能…我使用了select DISTINCT,它仍然显示重复项您的意思是没有更改或返回零行?如果没有任何更改,那么在重复行中哪些字段没有重复?没有,它仍然显示重复项。选择不同的s.sp_id、s.Symposis、s.logline、s.user_id、s.bin_状态、s.sp_顺序、s.sp_down_计数、s.sp_名称等…好的,那么在有两次“John Doe”的行中,这两行之间的特定字段不同?电话号码不同吗?情况如何?等等。那么,听起来你有重复的数据。否则,如果这些联接表上存在一对多关系,则可能会对任何父行运行重复数据。