在连接表上存储实体列表
Storing list of entity over joined tables
背景
本质上,我想存储如下内容:
{
id : 1,
name : 'john',
favorite_pets : ['cat', 'dog'],
favorite_colors : ['red', 'white', 'green']
}
在具有三个表的关系数据库中:
Table 主要:
id name
1 John
Table fav_pets:
id pet
1 cat
1 dog
Table fav_colors:
id pet
1 red
1 white
1 green
问题
我想要一个 SQL 查询 return 是这样的:
id name pet color
1 john cat red
1 john dog white
1 john null green
问题是如果我这样做:
select * from main
outer join fav_pets on main.id=pet.id
outer join fav_colors on main.id=fav_colors.id;
它将return一个包含6行的结果集:
id name pet color
1 john cat red
1 john cat white
1 john cat green
1 john dog red
1 john dog white
1 john dog green
我可以在一个 SQL 查询中不重复行的情况下完成对象的加载吗?
您目前正在加入主键上的不同实体。您需要加入外键。如果 John 可以有最喜欢的宠物和最喜欢的颜色,那么主 table 应该有 fav_pet_id
和 fav_color_id
的列,它们是 fav_pet.id
和 [=14= 的外键].您还需要将 fav_colors 中的列名称从 pet
更改为 color
。完成这些更改后,您的查询应如下所示:
select main.name, fav_pets.pet, fav_colors.color
from main
left outer join fav_pets on main.pet_id=pet.id
left outer join fav_colors on main.color_id=fav_colors.id;
阅读 table 规范化、主键和外键。从这个 link 开始 https://www.w3schools.com/sql/sql_create_db.asp。
背景
本质上,我想存储如下内容:
{
id : 1,
name : 'john',
favorite_pets : ['cat', 'dog'],
favorite_colors : ['red', 'white', 'green']
}
在具有三个表的关系数据库中:
Table 主要:
id name
1 John
Table fav_pets:
id pet
1 cat
1 dog
Table fav_colors:
id pet
1 red
1 white
1 green
问题
我想要一个 SQL 查询 return 是这样的:
id name pet color
1 john cat red
1 john dog white
1 john null green
问题是如果我这样做:
select * from main
outer join fav_pets on main.id=pet.id
outer join fav_colors on main.id=fav_colors.id;
它将return一个包含6行的结果集:
id name pet color
1 john cat red
1 john cat white
1 john cat green
1 john dog red
1 john dog white
1 john dog green
我可以在一个 SQL 查询中不重复行的情况下完成对象的加载吗?
您目前正在加入主键上的不同实体。您需要加入外键。如果 John 可以有最喜欢的宠物和最喜欢的颜色,那么主 table 应该有 fav_pet_id
和 fav_color_id
的列,它们是 fav_pet.id
和 [=14= 的外键].您还需要将 fav_colors 中的列名称从 pet
更改为 color
。完成这些更改后,您的查询应如下所示:
select main.name, fav_pets.pet, fav_colors.color
from main
left outer join fav_pets on main.pet_id=pet.id
left outer join fav_colors on main.color_id=fav_colors.id;
阅读 table 规范化、主键和外键。从这个 link 开始 https://www.w3schools.com/sql/sql_create_db.asp。