例如,这是2个表,每个表1行:
餐桌人物
id age
0 30
1 41
2 15
餐桌人物
ids group
0,2 a
1 b
如何使此查询有效?
SELECT id, age FROM Person WHERE ID like (select ids FROM People WHERE ids = '0,2')
这应该列出第一个表的ID 0和2行,即“ 0,2”中包含的任何ID。
id age
0 30
2 15
有一种简单的方法吗?
答案 0 :(得分:2)
您应该首先努力修复数据模型。您不应该在字符串列中存储多个数值。
如果某人可能属于一个组,则只需在person
表中添加一列即可代表相关组的id
:
id name
1 a
2 b
id age group_id
1 30 1
2 41 1
3 15 2
如果某人可能属于may组,则应该有一个单独的表,其中每个(id, grp)
元组都存储在单独的行中。
id name
1 a
2 b
id age
1 30
2 41
3 15
id_person id_group
1 1
2 1
3 1
3 2
通过这两种设置,编写查询以检索给定组的成员或将表联接在一起很容易。
就您当前的设计而言:我认为您正在寻找跨表的联接条件。一种选择是:
SELECT pn.id, pn.age
FROM Person pn
INNER JOIN People pe ON ',' + pe.ids + ',' LIKE '%,' + pn.id + ',%'
WHERE pe.group = 'a'
或使用exists
条件:
SELECT pn.*
FROM Person pn
WHERE EXISTS (
SELECT 1
FROM People pe
WHERE
',' + pe.ids + ',' LIKE '%,' + pn.id + ',%'
AND pe.group = 'a'
)