我有两张桌子。 skill
和userskill
。
技能行
type:1
name:'Web Development'
id: 1
type:1
name:'Graphic Design'
id: 2
userskill row
user_id: 1
skill_type: 1
skills: '1,2'
以下查询仅返回第一行,而不是我预期的两行。我想知道为什么,如果这种类型的加入甚至可能/一个好的做法。
查询
SELECT b.name,b.type
FROM userskill a
JOIN skill b ON a.skill_type=b.type
WHERE a.user_id="1" AND b.id IN(a.skills)
您可能想知道为什么查询没有尝试约束skill_type
这是因为我想返回所有用户技能的列表,然后可以按应用程序中的类型对其进行排序。在我看来,这比执行许多查询更合适。
答案 0 :(得分:2)
用户技能表具有多个值的属性,您应该允许userskill表具有相同信息但技能不同的多行
示例:
user_id skill_type skill
1 1 1
1 1 2
在这种情况下,主键是所有属性
参考:How to store multiple values in single column where use less memory?
修改
查询将是:
SELECT b.name,b.type
FROM userskill a
JOIN skill b ON a.skill_type=b.type
WHERE a.user_id="1"