【发布时间】:2013-12-14 07:00:23
【问题描述】:
我已经被这个问题困住了,我不确定我应该如何提出我的查询。
我有两张表,一张是 articles,另一张是所谓的 ATC 代码。
ATC 代码如下所示:N02AA59。这是一个由 7 个字符组成的完整代码。最后一个字符之前的每个字符都是一个特定的类别。因此N02A 也是一个 ATC 代码。
现在我的文章表包含的远不是所有 ATC 代码。 我想要实现的是在自动完成中使用的结果集,以这样一种方式,所有 ATC 代码子字符串(字符 1-6)应该是结果集的一部分,当且仅当它们导致文章的 ATC 代码以我的文章表中的这些字符开头。
例如,如果我在自动完成中输入“N02A”,那么应该成为结果集一部分的项目都是以“N02A”开头的 ATC 代码,因为我们有一篇文章的 ATC 代码为“N02AA59” ”。
这是基本查询,但您可能猜到,它只返回 7 字符的 ATC 代码,因为我的文章表中不存在更短的 ATC 代码:
SELECT _atc_codes.code, _atc_codes.name
FROM articles
JOIN _atc_codes
ON (_atc_codes.code LIKE 'N02A%' AND _atc_codes.id = articles.atc_code)
整个查询有一个转折点。第二列,对应的名称字段,必须是生成的 ATC 代码。所以如果我搜索“N02A”,这并不意味着每个项目都应该有 ATC 代码“N02A”的名称。
【问题讨论】:
-
你试过
SUBSTR函数吗?它可能会帮助你sql.sh/fonctions/substring -
使用 UNION 查询返回不同长度的
SUBSTRs。 -
对不起,我不明白你在追求什么,但这是关于层次结构的东西,不是吗?例如,搜索 N02AB (N02A) 应该会抛出 QN02AB53(芬太尼组合,右)
-
@Strawberry 你说得对层次结构,但 N02AB 不应该匹配 QN02AB53,匹配只在右侧 (N02AB%)。
-
好的,但是(并且看着我疯狂地超越任何我所知道的最微弱的知识)QN02AB53(Fantanyl combos)是 N02AB(苯基哌啶衍生物)的一个子类别