【问题标题】:Loop through comma-separated tags in a table and make many-to-many-relation to match in a tag-table循环遍历表中逗号分隔的标签,并在标签表中建立多对多关系以匹配
【发布时间】:2016-03-20 19:28:22
【问题描述】:

我在 SQL Server 2008 中有这 3 个表:

Table1 - 某事

ID    Title    Tags
---------------------------
1     Test1    a, aa, b
2     Test2    a, b
3     Test3    b, bb

Table2 - 标签

ID    Tag
----------
1     a
2     b
3     aa
4     bb

Table3 - 多对多关系表 btw Table1 和 Table2

ID    table1ID    table2ID

问题/问题:我需要一些能够遍历每个 Table1 行的逗号分隔标签的 SQL,在 Table2(标签)中搜索匹配项,并将关系值插入到 Table3 中......像这样的结果:

Table3 - 多对多关系表:

ID    t1ID  t2ID
-----------------
1     1     1
2     1     3
3     1     2
4     2     1
5     2     2
6     3     2
7     3     4

注意! 'a' 和 'aa'、'b' 和 'bb' 等之间没有匹配/关系。只有“严格”匹配。

是的 - 当我在 Table3 中生成值时 - 我将删除 Table1 中的标签列(因为它不再需要)。

请帮忙。我是一个绝望的新手!

请原谅新手的愚蠢和幼稚——我已经尝试过寻找解决方案,但是将这个问题翻译成简单的搜索词有点复杂——我可能忽略了一个类似的问题

【问题讨论】:

  • 如果你谷歌一下,很多例子和方法可以把逗号分隔成表格:例如来自这个网站stackoverflow.com/questions/5493510/…
  • 谢谢 - 但我去过那里。而且我确实已经将 Table1 中的标签(commasep.)变成了 Table2。但现在我需要最后一步...... Table3:循环通过 Table1 - 在 Table2 中搜索匹配 - 如果有匹配则将关系值放入 Table3
  • 抱歉,没注意到你已经翻过了。但不要在 SQL 中循环 - 它适用于数据集,因此您只需连接您的表和结果并使用它插入您需要/想要的任何表中。如果您不方便一次性完成,请使用公用表表达式和临时表。
  • 别这样(对不起)。非常感谢您能花时间帮助我解决我疯狂的 sql 问题 :-) 非常感谢。

标签: sql sql-server-2008


【解决方案1】:

试试这个:

Select * into Table3 from (
select ROW_NUMBER() over (ORDER BY Something.id, Tags.id) as id
, Something.id as t1ID 
, Tags.id as t2ID
from Something, tags
where ', ' + Something.tags + ',' like '%, ' + tags.Tag + ',%')

【讨论】:

  • 是的!谢谢你。这解决了问题。它甚至比我想象的要简单得多。怎么可能这么容易?!!我寻找了拆分功能和许多其他更复杂的解决方案……哇。我很感激。谢谢你:-)
  • 顺便说一句……我稍微调整了一下。我的身份证上有“身份”。而且我对 SELECT * INTO 有问题......只有一些小事情/调整:
  • INSERT INTO Table3 (table1ID, table2ID) ( SELECT Table1.id AS t1ID, Table2.id AS t2ID FROM Table1, Table2 WHERE ',' + Table1.tags + ',' LIKE '%,' + Table2.Tag + ',%' ) 我真的很喜欢这个解决方案。如此惊人的简单。再次感谢:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2017-03-24
  • 2018-10-22
相关资源
最近更新 更多