【发布时间】:2015-04-30 10:34:47
【问题描述】:
我在下面有一个查询,它返回了一组非常大的数据:
SELECT
a.id,
a.name,
c.c_name,
l.t_id,
t.n_id,
l.lr_id,
l.created,
l.am_id,
e.e_name
FROM l
INNER JOIN e
ON l.e_id=e.e_id
INNER JOIN t
ON l.t_id=t.t_id
INNER JOIN a
ON l.a_id=a.a_id
INNER JOIN c
ON a.p_c_id=c.c_id
WHERE lower(c.c_name) LIKE 'XXX' and l.date_created > 'YYYY-MM-DD'
ORDER BY a_name, created
这些数据很有用,但它是一个如此庞大的数据集,因此很难找到我正在搜索的具体问题。
我希望能够重写 where 子句以在 e.e_name 列中搜索字符串模式。 (WHERE e.e_name like XXXX) 然后返回任何 a.id 的所有记录,该记录具有与搜索字符串匹配的任何 e.e_name 记录。
如果 a.id 具有 e.e_name 匹配项,我只是不知道如何返回 a.id 的所有记录。 :(
编辑:所以简化的数据看起来像
555 | Bob Jones | Staff | 123 | 232 | 454 | 2015-02-27 1:00 | Location 1
556 | Bob Jones | Staff | 123 | 232 | 456 | 2015-02-27 1:01 | Location 2
基本上重复了鲍勃琼斯的许多地点。因此,我要做的是找到 Bob Jones(或任何其他人)的所有记录,该记录具有与搜索字符串匹配的位置的任何记录。我的问题是执行 LIKE 或 = 搜索只返回匹配的记录,而不是所有周围的记录(我需要上下文)。
【问题讨论】:
-
这里没有足够的信息来提供任何可靠的帮助。我假设 Exciter 是您的表,别名为“e”。您发布的查询没有任何别名。我认为您可以使用 where exists 谓词,但如果不查看表结构就很难确定。
-
还需要查看样本数据和想要的结果。
-
是什么阻止你从 WHERE e.e_name like XXXX 开始?
-
@Blam 所以我不能使用 LIKE 的原因是因为我不想要匹配 e_name 模式的记录。如果单个记录与 e.e_name 模式匹配,我想获取与 e.e_name 匹配的 a.id 的所有记录。这是因为我不在乎比赛,我在乎的是比赛前后的记录。
-
@TabAlleman 因此,如果我使用 LIKE 或 = 搜索 e.e_name 字符串匹配,则目前我的结果仅返回匹配的 a.id 的记录。我要返回的是具有与搜索模式匹配的任何 e.e_name 记录的任何 a.id 的所有记录。数据结果包含大量私人信息,因此我无法在此处分享结果集。 :(
标签: sql sql-server tsql dataset