其中一列的值包含在另一列的值中

时间:2013-12-02 23:00:09

标签: sql sql-server-2008

我正在尝试编写一个比较两个表的查询,并查找其中一个字段包含在另一个字段中的所有条目。例如,一个字段包含单个5位数的登录ID,例如12345。第二个字段包含一个或多个以逗号分隔的ID,但字符为文本^在前面,例如text^12345text^12345,54321,13579,97531

如果我尝试

Select * from table1.login_id a
join table2.login_id b 
   on b.login_id LIKE '%' + a.login_id + '%'

我发现它只是加入列表中的最后一个条目。因此,如果a.login_id = 12345它只会带回where b.login_id = text^12345text^54321,12345但不会带回text^12345,54321

我只是错过了什么?

注意:我使用的是SQL Server 2008,因此查询无法使用CONCAT。

3 个答案:

答案 0 :(得分:0)

您需要使用CONCAT()汇总字符串:

Select * from table1.login_id a
join table2.login_id b 
   on b.login_id LIKE CONCAT('%', a.login_id, '%')

答案 1 :(得分:0)

也许存在的地方是合适的:

select * from table1 as a where exists (
    select b.login_id from table2 as b where a.login_id like concat('%', b.login_id, '%')
);

答案 2 :(得分:0)

你错过了什么。您的问题无法重现。

当我运行以下内容时:

import re, requests

s = '<div class="figure"> <img src="http://127.0.0.1:8000/download_resource/4" title="vvv" alt="dovv" /><div class="figure"> <imgsrc="http://www.clickgratis.com.br/fotos-imagens/imagens/aHR0cHM6Ly9zaW1nLm1pbmhhdGVjYS5jb20uYnIvMjliN2RhMDQwMjE0ZmU2NTI2MzBkZjQwMztitle="olaaaa" alt="oi" /><p class="caption">oi</p> </div>'

print re.findall("<img src=\"(.*?)\"", s)

def get64(url):
    a = base64.b64encode(requests.get(url).content)
    return 'data:image/jpg;base64,' + a

for image in re.findall("<img src=\"(.*?)\"", s):
    s = re.sub(image, get64(image), s)

我明白了:

DECLARE @Table1 TABLE (login_id varchar(255));
DECLARE @Table2 TABLE (login_id varchar(255));

INSERT INTO @Table1 VALUES ('12345');
INSERT INTO @Table2 VALUES ('text^12345,54321');

Select * from @Table1 a
join @Table2 b 
   on b.login_id LIKE '%' + a.login_id + '%';

所以当你说

  

它只返回b.login_id = text ^ 12345或text ^ 54321,12345   但不是文字^ 12345,54321

你错了。它确实带回了那个文本。找出您在问题中发布的查询与您正在使用的实际查询之间的差异,您将找到您所缺少的内容。或者,如果查询中没有差异,则差异在于数据。您问题中的数据可能无法与您的实际数据进行比较。

相关问题