Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 从另一个表中搜索具有通配符值的多个列_Sql_Sql Server_Sql Server 2008 - Fatal编程技术网

Sql 从另一个表中搜索具有通配符值的多个列

Sql 从另一个表中搜索具有通配符值的多个列,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,我有两张桌子:电话和设备 设备样本(共93台设备): My Calls表有几列,但其中4列中可能存在Devices表中的值。但是,例如,这些列中包含文本和其他值 1234 (Jim Jones), 5555 (Helpline) 6666 (Services), 3412 (Mike Rowe) 我试图弄清楚如何使用Devices表和“IN”语句基本上进行通配符搜索(%)。这甚至可能是不可能的 这不是有效的sql,但我正试图表达我的观点: select * from Calls where R

我有两张桌子:电话和设备

设备样本(共93台设备):

My Calls表有几列,但其中4列中可能存在Devices表中的值。但是,例如,这些列中包含文本和其他值

1234 (Jim Jones), 5555 (Helpline)
6666 (Services), 3412 (Mike Rowe)
我试图弄清楚如何使用Devices表和“IN”语句基本上进行通配符搜索(%)。这甚至可能是不可能的

这不是有效的sql,但我正试图表达我的观点:

select * from Calls where Row2 LIKE IN ( select * from devices)

我就是受不了这件事。请输入任何信息。

我不建议这样做,但这应该满足您的要求:

SELECT C.* 
FROM Calls C
INNER JOIN devices D
    ON C.Row2 LIKE '%' + D.Col1 + '%'

假设在
Calls.Row2
中的每个号码后面都有一个空格,您可以尝试以下方法

select distinct c.*
from calls c join devices d 
     on charindex(convert(varchar(10), d.deviceid) + ' ', c.row2)>0


更新:根据@Shiva的评论,选择列表是不同的,以避免重复记录

如果一行有多个匹配的DeviceID,则此操作失败。看,我想你可以通过在SELECT@Shiva,同意,它将带来重复记录。我已经更新了答案。
select distinct c.*
from calls c join devices d 
     on charindex(convert(varchar(10), d.deviceid) + ' ', c.row2)>0