如何使用LIKE'加入' %”

问题描述 投票:-1回答:1

我有一个项目列表,每个项目都有一个类别代码:

id | name       | category_code
---+------------+--------------
11 | 'Cookies'  | '43040'
53 | 'Potatoes' | '43100'

这些类别代码按层次结构工作,例如,开头43可能意味着食物,结束04糕点或结束10根菜类。

我还有一个代码名称表,如下所示:

code    | name
--------+------------------------------------
'4304'  | 'Food -> Pastery'
'43040' | 'Food -> Pastery -> Cookie'
'43100' | 'Food -> Root Vegetables -> Potato'

这些代码和系统不是我设计的,所以我不能影响它。就是这样。

现在问题是,我有关键字到代码的映射,例如:

id | key       | code
---+-----------+--------
22 | 'cookie'  | '43040'
23 | 'pastery' | '4304'
24 | 'cake'    | '43042'

我需要根据这些关键字执行搜索。到目前为止我尝试了什么:

SELECT item.id, item.name, category.code, category.name
FROM item
LEFT JOIN category ON category.code = item.category_code
LEFT JOIN keyword ON keyword.code = category.code
WHERE LOWER(keyword.key) = ANY(ARRAY['pastery', 'root']);

但问题出现在像JOIN category ON category.code = item.category_code这样的中间,因为项目总是具有长度为5的完整代码,但是像4304和与之匹配的关键字等代码的主要类别。

我需要与LIKE%进行连接,理想情况是这样的:

SELECT item.id, item.name, category.code, category.name
FROM item
LEFT JOIN category ON (category.code + '%') LIKE item.category_code
LEFT JOIN keyword ON keyword.code = category.code
WHERE LOWER(keyword.key) = ANY(ARRAY['pastery', 'root']);

但显然(category.code + '%')不受支持。我怎样才能以其他方式实现这一目标?

sql postgresql join sql-like postgresql-9.4
1个回答
2
投票

我想这就是你想要的。 like的顺序错误:

SELECT i.id, i.name, c.code, c.name
FROM item i LEFT JOIN
     category c
     ON  i.category_code like c.code || '%' LEFT JOIN
     keyword k
     ON k.code = c.code
WHERE LOWER(keyword.key) = ANY(ARRAY['pastery', 'root']);
© www.soinside.com 2019 - 2024. All rights reserved.