【问题标题】:sql compare tables using likesql使用like比较表
【发布时间】:2018-11-14 00:36:31
【问题描述】:

我正在尝试在另一个表中使用 LIKE 命令比较 sql 中的两个表。

表1

accountNumber     description
12345             wires sent out    

表2

keywords
wire
fund
fee

所以我想说,给我table1中的所有记录,table1.description就是table2.keywords中的LIKE记录

这有意义吗?然后我试图做相反的事情......给我table1中的所有记录,而不是table2.keywards。

我试过这条线,但它不起作用

left join dbo.cashkeywords cashkeyTable on cashkeyTable.keyword like xxxTable.PSDSC1

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。

标签: sql sql-server


【解决方案1】:

大概,您需要通配符。在标准 SQL 中,这看起来像:

left join
dbo.cashkeywords cashkeyTable
on cashkeyTable.keyword like '%' || xxxTable.PSDSC1 || '%'

嗯。 . .那应该是真的:

on ?.keywordlist like '%' || ?.keyword || '%'

从您的命名中很难分辨出哪个是哪个。您可能还想包含分隔符。

对于排除,您需要where ?.keyword is null

字符串连接函数/运算符可能因数据库而异,因此这可能不是您数据库的确切语法。

顺便说一句,将值列表存储在单个列中是一个非常糟糕的主意。您应该有一个单独的表格,每个关键字都有一行,而不是将所有关键字塞入一列。

【讨论】:

  • 我将编辑问题以提供更多详细信息... table2,有 1 列,具有不同的关键字记录
  • 我刚试过这个,所有的行都被返回了......所以有些东西是关闭的。 FROM dbo.xxx xxxTable left join dbo.cashkeywords cashkeyTable on cashkeyTable.keyword like '%' + xxxTable.PSDSC1 + '%'
【解决方案2】:

使用交叉应用:

declare @Table1 table ([accountNumber] int, [description] nvarchar(100))
insert into @Table1 values (12345, 'wires sent out')

declare @Table2 table ([keywords] nvarchar(100))
insert into @Table2 values 
('wire')
,('fund')
,('fee')

select distinct *
from @Table1 t1
cross apply @Table2 t2
where t1.description like '%' + t2.keywords + '%'

单次退货:

select distinct t1.*
from @Table1 t1
cross apply @Table2 t2
where t1.description like '%' + t2.keywords + '%'

【讨论】:

  • 谢谢...所以这似乎是正确的道路,但有一点小故障。一些结果被返回两次。这是一个具体的例子.. table1description 是 FUNDS RECD... 在我的关键字表中我有基金,rec。因为关键字中有 2 个不同的词,它会返回两次吗?
  • @solarissf 是的。如果您想要单行,它不能显示关键字。我添加了单行选项。
  • 单一退货选项似乎适用于我的第一个样本集...谢谢!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 2011-12-24
  • 1970-01-01
相关资源
最近更新 更多