如何查找子查询字符串包含主查询字符串的行?

How to find rows where subquery string contains main query string?

例如,这里有 2 个 table,每个 1 行:

Table 人

id   age
0    30 
1    41
2    15

Table 人

ids    group
0,2    a
1      b

我如何使这个查询起作用?

SELECT id, age FROM Person WHERE ID like (select ids FROM People WHERE ids = '0,2')

这应该从第一个 table 开始列出 ID 0 和 2 行,即“0,2”中包含的任何 ID“

id   age
0    30 
2    15

有没有简单的方法来做到这一点?

您首先应该努力修复数据模型。您不应在字符串列中存储多个数值。

如果一个人可能属于一个组,您可以在 person table 中添加一列代表相关组的 id

  • Table 组:
id   name
1    a
2    b
  • Table人:
id   age   group_id
1    30    1
2    41    1
3    15    2

如果一个人可能属于多个组,您应该有一个单独的 table,其中每个 (id, grp) 元组存储在单独的行中。

  • Table 组:
id   name
1    a
2    b
  • Table人:
id   age
1    30 
2    41
3    15
  • Table person_groups:
id_person    id_group
1            1
2            1
3            1
3            2

有了这两个 set-ups,可以很容易地编写查询来检索给定组的成员,或者将 table 连接在一起。


就您当前的设计而言:我认为您正在寻找跨 table 的连接条件。一种选择是:

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'
)