Mysql 一对多连接,行到列
Mysql one to many join, rows to columns
我在 MySql 数据库中有 2 个 table 名为 con01_objects 和 con01_object_contacts。他们有如图所示的外键 (con01_objects.id = con01_object_contacts.obj_id).
image
如您所见,con01_object_contacts table 包含 contact_type 列,其中将有多个一个对象的联系人类型及其对应的联系人(联系人类型:0-number, 1-web, 2-tolfree, 3- facebook, 4-twitter, 5-instagram, 6-youtube, 7- mail)。
我需要的是加入这2个table,这样就不会出现重复的对象了。我需要一个联合结果,它将每个联系人类型显示为一列。如果相应联系类型中的对象没有联系,则该条目应为 NULL。
+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++
objects--- contype_0(num)---- contype1(WEB) ----- contype(tolfree)
++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
obj1 ---- +96785445578700 ---- SOMETHING.c0M ----- 45469889
obj2 ---- +55457875748787 ------ NULL ---------------------- 42499898
我试过这个查询,但它 returns 重复行,因为一个对象具有不同的联系人类型。 :
SELECT * FROM con01_objects LEFT JOIN con01_object_contacts ON con01_objects.id= con01_object_contacts.obj_id
先谢谢了。
我想你正在寻找这个:
Select distinct(a.jid),
(SELECT contact FROM con01_object_contacts where contact_type = '0') as contype_0,
(SELECT contact FROM con01_object_contacts where contact_type = '1') as contype_1,
(SELECT contact FROM con01_object_contacts where contact_type = '2') as contype_2
from con01_objects a
left join con01_object_contacts as b
on a.id = b.obj_id;
我在 MySql 数据库中有 2 个 table 名为 con01_objects 和 con01_object_contacts。他们有如图所示的外键 (con01_objects.id = con01_object_contacts.obj_id).
image
如您所见,con01_object_contacts table 包含 contact_type 列,其中将有多个一个对象的联系人类型及其对应的联系人(联系人类型:0-number, 1-web, 2-tolfree, 3- facebook, 4-twitter, 5-instagram, 6-youtube, 7- mail)。
我需要的是加入这2个table,这样就不会出现重复的对象了。我需要一个联合结果,它将每个联系人类型显示为一列。如果相应联系类型中的对象没有联系,则该条目应为 NULL。
+++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++
objects--- contype_0(num)---- contype1(WEB) ----- contype(tolfree) ++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++
obj1 ---- +96785445578700 ---- SOMETHING.c0M ----- 45469889
obj2 ---- +55457875748787 ------ NULL ---------------------- 42499898
我试过这个查询,但它 returns 重复行,因为一个对象具有不同的联系人类型。 :
SELECT * FROM con01_objects LEFT JOIN con01_object_contacts ON con01_objects.id= con01_object_contacts.obj_id
先谢谢了。
我想你正在寻找这个:
Select distinct(a.jid),
(SELECT contact FROM con01_object_contacts where contact_type = '0') as contype_0,
(SELECT contact FROM con01_object_contacts where contact_type = '1') as contype_1,
(SELECT contact FROM con01_object_contacts where contact_type = '2') as contype_2
from con01_objects a
left join con01_object_contacts as b
on a.id = b.obj_id;