2014-01-06 66 views
0

我想找到最有效的方式来查询下表:代码的伪是罚款查询效率。载

City  Name Comment    Mentioned 

Tampa Steve "I don't like Jim" 
Tampa Jim  "Who is Steve" 
Lincoln Sarah "Where is Angie" 
Lincoln Angie "Hi Sarah" 

我想找个地方,从一个城市人们一提到有人从同一城市其他。有大量的数据,所以我需要最有效的方式。我知道如何以多种方式编写查询,但我正在寻找最佳方法。所以基本上史蒂夫“提及”吉姆,但如果史蒂夫提到萨拉,这是不相关的,因为他们不是来自同一个城市。我正在寻找LINQ或SQL。 注意:吉姆可能有20个不同的评论,这就是为什么我不确定是否应该在评论中搜索作者之前创建一个清晰的列表。 在此先感谢

+1

确保您有评论全文索引,然后用对阵 – user1336827

+1

你怎么了知道吉姆在谈论同样的史蒂夫?他甚至不知道他是谁。 – Jodrell

+0

这个名字是由城市独一无二的。 – user2525463

回答

0
select t.Name, t1.Name Mentioned 
from table t 
inner join table t1 on t.City = t1.City 
where t.Comment like '%' + t1.Name + '%' 

不是MySQL用户,所以我不知道这是否是有效的MySQL,但它是其他数据块。

新增讨论后:

select t1.City, t1.Name, names.Name Mentions 
from table t1 
cross join 
(
    select distinct x.Name, x.City 
    from table x 
) names 
where names.Name <> t1.Name 
and t1.Comment like '%' + names.Name + '%' 

(这是SQL Server语法的要求进行调整。)

+0

嗨。虽然这可能会起作用(不知何故...),但它远非最有效的解决方案。 – Sebas

+0

确实如此,但是如果性能不可接受,一旦您有了工作,您就可以打开查询计划并从那里开始。我可以看到一个优化,获得独特的城市/名称对的列表并使用它,但是a)它掩盖了他需要使用的技术,b)增加了输入不会运行的查询的机会。 –

+0

@simonatrcl这实际上是我现在正在做的“获取唯一的城市/名称对列表”,并在循环内部运行循环,并使用LINQ创建列表。我相信他们是一个更快的方式。 – user2525463