在mysql中加入4个表,给我重复的记录

时间:2017-07-04 12:30:29

标签: php mysql

我想在mysql查询中加入以下4个表(lead,categories,sales_persons,website_assigns):

必需:我需要潜在客户ID和潜在客户记录,但不确定该潜在客户的类别,销售人员是否存在, 如果他们的类别和销售人员存在,那么否则没有必要的意味着null。

lead和sales_person direct之间没有任何关系,它们与第三个表绑定,即website_assign

MySql查询:

SELECT a.id, a.name, b.name, c.first_name, c.last_name
FROM leads a INNER JOIN sales_persons c
LEFT JOIN categories b ON a.category_id = b.id
LEFT JOIN website_assigns d ON a.id = d.lead_id and c.id = d.sales_person_id

以上查询给我重复记录了潜在客户,类别和销售人员表

表格

leads:
id  |   name | category_id
 1      xyz     12
 2      abc     13
 3      def     14
 4      gty     15
 5      wer     16

categories:
id  |   name
12      grocery
13      cloths
14      books
15      travel
16      furniture


sales_persons:    
id  | first_name | last_name

111     Jack        Soloman
112     Peris       Rock
113     Pull        Cha
114     Tim         shock


website_assigns:
id  | lead_id | sales_person_id
1       1           112
2       1           114
3       2           113
4       2           111
5       3           113
6       3           112
7       3           114

附上重复的记录截屏:

查看重复的ID(潜在客户ID),名称(类别名称),sales_person的名字和姓氏,

但是4847,5888只分配了销售人员。

在屏幕截图中,leadsite_assign是同一个表website_assign。 所以忽略表的名称。

enter image description here

1 个答案:

答案 0 :(得分:1)

试试这个:

SELECT  
distinct a.id, a.name, b.name, c.first_name, c.last_name 
FROM  leads a 
LEFT JOIN  
website_assigns d on a.id = d.lead_id 
LEFT JOIN 
sales_persons c on c.id = d.sales_person_id 
LEFT JOIN 
categories b ON a.category_id = b.id

输出:

id          name   name    first_name   last_name
---         ----  -------  ---------    --------
1           xyz   grocery     Peris      Rock
1           xyz   grocery     Tim        shock
2           abc   cloths      Jack       Soloman
2           abc   cloths      Pull       Cha
3           def   books       Peris      Rock
3           def   books       Pull       Cha
3           def   books       Tim        shock
4           gty   travel      NULL       NULL
5           wer   furniture   NULL       NULL

了解加入:

我们可以看到leadssales_person通过website_assigns表间接连接。因此,我们使用LEFT JOIN将这3个表连接在一起。

LEFT JOIN基本上返回左侧表格中的每一行。右侧表中的非匹配行映射到NULL

categoriesleads之间的关系是a.category_id = b.id