我正在尝试编写一个比较两个表的查询,并查找其中一个字段包含在另一个字段中的所有条目。例如,一个字段包含单个5位数的登录ID,例如12345
。第二个字段包含一个或多个以逗号分隔的ID,但字符为文本^在前面,例如text^12345
或text^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^12345
或text^54321,12345
但不会带回text^12345,54321
我只是错过了什么?
注意:我使用的是SQL Server 2008,因此查询无法使用CONCAT。
答案 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
你错了。它确实带回了那个文本。找出您在问题中发布的查询与您正在使用的实际查询之间的差异,您将找到您所缺少的内容。或者,如果查询中没有差异,则差异在于数据。您问题中的数据可能无法与您的实际数据进行比较。