如何查找子查询字符串包含主查询字符串的行?
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'
)
例如,这里有 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'
)