使用表

时间:2015-10-27 22:56:14

标签: sql-server database filter

有关如何使用T-SQL查询完成此操作的任何想法?

我有两个表,表A 包含我想要返回但过滤的记录。 表B 包含过滤器和类类别列表。新记录一直添加到表A中。目标是根据表B 中列出的过滤器,在表A 中对记录进行动态分类。

示例:

表A

Name
------------
John Doe 
Mary Lamb
Peter Pan
Tom Sawyer
Suzie Lamb
Nancy Lamb
Josh Reddin

表B

Filter    | Category
----------------------
John%Doe% | Team 1 
%Lamb%    | Team 2
Tom%      | Team 1

期望的输出:

Name        | Category
John Doe    | Team 1
Tom Sawyer  | Team 1
Mary Lamb   | Team 2
Suzie Lamb  | Team 2 
Nancy Lamb  | Team 2 
Peter Pan   | 
Josh Reddin |

我考虑过做以下事情,但不确定这是否是最佳解决方案:

  1. SELECT Filter, category from TableB(获取过滤器列表)
  2. 使用SQL循环通过(1.)中返回的过滤器,并使用LIKE在表A中查找匹配项。

    示例:

     SELECT name, Category 
     FROM Table A, Table B 
     WHERE Table A.Name Like (CURRENT filter FROM B) 
    
  3. 将(2.)中返回的记录插入/附加到TempTable

  4. SELECT * 
    FROM TempTable (this returns Names and categories as shown in the desired output)
    
    UNION
    
    SELECT * 
    FROM Table A 
    RIGHT OUTER JOIN TempTable on NAME 
    WHERE Category in null
    

    (这会返回没有找到类别的行...... Peter Pan和Josh Reddin)

  5. 有什么想法吗?

    表现如何?

    感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用likeleft join

的组合
select a.Name,b.Category
from tableA a left join tableB b on a.name like b.Filter