使用SQL 2008从另一个表中的like值更新表ID

时间:2010-01-17 17:04:26

标签: sql

我有一张桌子,我正在捕捉反馈链接。插入referal链接时,我有另一个包含主机名的表(主机表中不允许重复。因此,如果它已存在,则从referal主机表中提取ID)。表格结构是:

Referal Table:
referalTableID
referalLink
referalHostID (FK from the referal host table)

Referal Host Table:
referalHostID
ReferalHostName
ReferalHostDisplayName

我的applcaiton中有一个错误,其中referalHostID未被添加到Referal表中。因此,我必须使用正确的ID来手动更新referal表。我需要使用referal主机表中的正确ID更新Referal Table。我开始使用这样的SQL:

;with RHTable as (
Select * from ReferalHostTable)

Update ReferalTable Set referalHostID = (
Select referalHostID from RHTable, ReferalHostTable where ReferalHostTable link '%' + RHTable.ReferalHostName + '%')

这不起作用,因为在子查询中继续选择多个值。我有点理解为什么,但有没有人有更好的解决方案?

谢谢

2 个答案:

答案 0 :(得分:1)

应该是类似的东西:

Update r
Set r.referalHostID = h.referalHostID
from ReferalTable r
inner join ReferalHostTable h
    on r.referalLink like '%' + h.ReferalHostName + '%'
where r.ReferalHostID is null 
    or r.referalHostID <> h.referalHostID

答案 1 :(得分:1)

令人担心的是,您使用%在两侧匹配主机名。这会产生各种误报。例如,meta.stackoverflow.com将匹配stackoverflow.com