SQL匹配一个表中的列值,另一个表中的列值没有连接

时间:2016-07-21 03:07:04

标签: sql sql-server

我有2张桌子。 一个是任务表  Task Table

WONumber表 WONumber table

现在我需要从wonumber表中查找wonumber并在任务表中查找taskname。 基本上加入了两个表。

我尝试了这个查询,但它不起作用

select * from task at t
join wonumber as w
on t.taskname like '%'+w.wonumber+'%'

但这会产生70000行并减慢数据库速度,我必须重新启动它。 当两个表都不相关时,应该有办法在另一个表中查找一个表值。

2 个答案:

答案 0 :(得分:1)

这肯定是糟糕的数据库设计,但如果您确定task.taskName#***结尾且wonumber.wonumber#开头,那么您可以提高性能(一点点)使用

select * from task at t
join wonumber as w
on t.taskname like '%'+w.wonumber --no trailing '%'

答案 1 :(得分:0)

如果保证数据模式一致(两个表中的#后跟tasknumber)并且该模式在"任务"表,最后没有空格。

Select * from
(
Select t.*, Right(t.taskname, Patindex('%#%', t.taskname ) + 1 ) as TaskNum
From Task t
) a INNER JOIN WonNumber w 
on a.TaskNum = w.wonumber

顺便说一句,你正在进入这些奇怪的情况,因为数据库设计不佳,Tasknumber应该在两个表中的单独列中,这将是一个简单的超快内连接查询。所以我基本上从任务表中提取tasknumber列作为一个单独的列,以便我可以使用它来连接Wonnumber表。 HTH!