【问题标题】:How to find rows where subquery string contains main query string?如何查找子查询字符串包含主查询字符串的行?
【发布时间】:2020-08-19 22:27:33
【问题描述】:

例如,这里有 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

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

【问题讨论】:

    标签: sql-server string csv sql-server-2008 subquery


    【解决方案1】:

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

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

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

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

    • 表组:
    id   name
    1    a
    2    b
    
    • 桌人:
    id   age
    1    30 
    2    41
    3    15
    
    • 表 person_groups:
    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'
    )
    

    【讨论】:

      猜你喜欢
      • 2015-04-19
      • 2011-05-14
      • 2023-04-10
      • 2013-07-05
      • 2011-02-05
      相关资源
      最近更新 更多