如何在MySQL

时间:2016-07-14 04:58:26

标签: mysql sql distinct

我有一张有45列的表格。列SrNo有一个primary key。它有数百万条记录。它包含很多重复项。我实际上想要找到唯一值并希望将它们插入另一个表中。列First-Middle-Last NameEmails(办公室,个人),MobileNumbers包含如此多的重复项。我试图使用下面的查询找到唯一的值,但它仍然显示重复的结果。任何人都可以帮助我在哪里误会?

SELECT ft.first_name
     , ft.middle_name
     , ft.last_name
     , ft.designation
     , ft.company_name
     , ft.email_office
     , ft.email_personal1
     , ft.email_personal2
     , ft.personal_mobile1
     , ft.personal_mobile2                                                                        
  FROM mytable ft    
  JOIN 
     ( SELECT First_Name
            , Middle_Name
            , Last_Name
            , designation
            , Company_Name
            , Email_Office
            , Email_Personal1
            , Email_Personal2
            , Personal_Mobile1
            , Personal_Mobile2
            , COUNT(*)
         FROM mytable
        GROUP 
           BY First_Name
            , Middle_Name
            , Last_Name
            , designation
            , Company_Name
            , Email_Office
            , Email_Personal1
            , Email_Personal2
            , Personal_Mobile1
            , Personal_Mobile2
       HAVING COUNT(*) = 1
     ) temp
    ON temp.first_name = ft.First_Name 
   AND temp.middle_name = ft.Middle_Name 
   AND temp.last_name = ft.Last_Name 
   AND temp.designation = ft.Designation 
   AND temp.company_name = ft.Company_Name 
   AND temp.email_office = ft.Email_Office 
   AND temp.email_personal1 = ft.Email_Personal1 
   AND temp.email_personal2 = ft.Email_Personal2 
   AND temp.personal_mobile1 = ft.Personal_Mobile1 
   AND temp.personal_mobile2 = ft.Personal_Mobile2
 WHERE srno <= 1000;     

它花了这么多时间来执行对fulldata的查询,因为它有数百万。这就是为什么我要将where条件显示为高达1000的记录。

它在EmailsNames的3列中显示重复。任何人都可以帮我解决这个问题吗?或者我这样做会更复杂吗?

另外如何获取那些count(*) > 1的记录,如何只记录其中一条记录而忽略其他重复记录?

以下是我的示例表格表示。

+-----------+------------+----------+-------------------+-------------+----------------+-----------------+---------------------+------------+------------+
| FirstName | MiddleName | LastName | Designation       | CompanyName | Email(o)       | Email(P1)       | Email(P2)           | Mobile(pl) | Mobile(p2) | 
+-----------+------------+----------+-------------------+-------------+----------------+-----------------+---------------------+------------+------------+
| Anil      |            |          | Personnel Manager | ABC         | anilgabc.com   | anilggmail.com  |                     | 9898989898 |        | 
| Anil      | D          | Gupta    | Personnel Manager | ABC         | anilggmail.com |         |             |        |        | 
| Anil      | D          |          |                   | ABC         | anilg@abc.com  |         |             |        |        | 
| Anil      |            | Gupta    | Personnel Manager |             |                |                 | anilgreditfmail.com | 9898989898 |        | 
| Anil      |            | Gupta    |                   | ABC         |                |                 |                     | 9898989898 |        | 
| Anil      | D          | Gupta    | Personnel Manager | ABC         | anilgabc.com   | anilg@gmail.com | anilgrediffmail.com | 9898989898 |        | 
+-----------+------------+----------+-------------------+-------------+----------------+-----------------+---------------------+------------+------------+

这是理想的结果......

1 个答案:

答案 0 :(得分:0)

首先对具有多个相同记录的表使用distinct,然后加入您需要的另一个表:像这样,


     select  distinct    ft.first_name,ft.middle_name,ft.last_name,ft.designation,ft.company_name,ft.emai  l_office,ft.email_personal1, ft.email_personal2,  ft.personal_mobile1,     ft.personal_mobile2                                                                        
      from mytable ft    and so on 




enter image description here

enter image description here