JOIN 2表和SELECT更多单元格

时间:2013-01-25 14:47:31

标签: mysql sql select join

嗨我有mysql的问题。我有2张桌子。

表工作和表人。

在表格工作中,我有4列ID人员

person1, person2, person3, person4, person5
  5          3       111      15       8

一定是这样的。

现在我想选择任何具有表工作但具有名称person的行。 首先我使用了这个:

JOIN person p1 ON(w.person1 = p1.id)
JOIN person p2 ON(w.person1 = p1.id)
JOIN person p3 ON(w.person1 = p1.id)
JOIN person p4 ON(w.person1 = p1.id)
JOIN person p5 ON(w.person1 = p1.id)

AND USED选择LIKE

SELECT p1.name, p2.name, p3.name.... 

但是如果我有很多行LIKE 10000,那么这个查询会慢慢来。

如何更改它以使用1 JOIN?

2 个答案:

答案 0 :(得分:3)

您的person表格未规范化,因此为了检索数据,您必须多次加入,如您找到的那样,或者您可以使用UNION ALL查询取消隐藏数据

此类查询与此类似:

select *
from work w
inner join
(
  select person1 p_name
  from person
  union all
  select person2
  from person
  union all
  select person3
  from person
  union all
  select person4
  from person
  union all
  select person5
  from person
) p
  on w.person1 = p.p_name

通过取消您正在获取列的数据并将其转换为行,以便您可以对数据执行一次连接。

答案 1 :(得分:1)

你不能在一个JOIN中完成所有这些,你的选择可能是审查数据库设计,因为1000加入不正常......

我最好的建议是创建一个关系表,所以你会有类似

的东西

即:

table_person 1是table_person_2的朋友

你不需要1000加入才能知道谁是谁的朋友......你只需要一个具有正确表结构和索引的连接。

请查看E/R Modeling

修改

我的建议是没有一个包含5列的表(person1,person2,person3 ......),使用person1和person2创建一个额外的表,并添加它们之间的所有关系。

现在你有

person1, person2, person3, person4, person5
  5          3       111      15       8

我建议把它放在一张桌子里。

person1, person2
  5          3  
  5         111  
 5          15  
 5           8