2009-11-09 54 views
0

我需要写我想称之为谷女孩的查询。我需要SELECT东西是LIKE IN - 这样的事情:你可以在同一时间选择某个地方的东西吗?

SELECT * FROM表1 WHERE名称LIKE IN(SELECT名称FROM表2)

这样做的原因是我有一个表充满公司名称,但它们并不完全一样 - f.ex.在表1中可能会说“克莱斯勒集团”,而在表2中它可能只是说“克莱斯勒”。

有没有简单的方法来做到这一点?

回答

2
select 
    * 
from 
    Table1 t1 
    inner join Table2 t2 on (t1.name like t2.name + '%') 

或没有,如果你想 '%' 符号:)

+0

这是一个ssslllooowww查询!但它确实回答了我的问题。不幸的是,由此产生的数据不足以满足我需要的数据,但这不是我的问题。 ;) – 2009-11-09 09:46:17

+0

您应该使用公司表并在其他表中使用其标识符。与它一起工作会更加舒适,并且速度很快。 – silent 2009-11-09 10:02:14

+0

表2实际上是一个临时表,用于这次一次性的出口运行,我打算这么做,因此并不是最好的实践方法。 – 2009-11-09 10:45:42

0

我想:

SELECT * FROM table1 WHERE EXISTS (SELECT Name FROM Table2 WHERE Table1.Name LIKE Name) 
+0

您应该查看您的建议的执行计划。 – silent 2009-11-09 09:16:43

+0

?如果你打算做出这样的评论,你应该解释*为什么* - 我非常愿意学习(为什么答案的前缀是“我认为:”),并且非常愿意删除答案,如果它的错误或适当编辑/注释,但首先需要更多的帮助 – Murph 2009-11-09 10:37:01

+0

有点旧,但我很无聊:你的查询的问题是WHERE EXISTS将在表1中每行被调用一次。由于WHERE EXISTS也使用LIKE运算符,因此性能可能会很差。鉴于最初的请求,我认为任何查询都会执行得很慢,所以不要把它放在心上:) – Meff 2009-12-29 13:53:51

1

这里是你可以做的一种方式:

SELECT t1.* 
FROM Table1 t1 
    JOIN Table2 t2 ON t1.Name LIKE t2.Name + '%' 
0

如果你是试图创建一个关闭匹配列表,然后SOUNDEX功能可能会有所帮助时,可能有拼写问题。

SELECT T1.* 
    FROM Table1 T1  
    JOIN Table2 T2 ON SOUNDEX(T1.Name) = SOUNDEX(T2.Name) 
相关问题