如何加入使用 LIKE '<column>%'
How to JOIN using LIKE '<column>%'
我有一个项目列表,每个项目都有一个类别代码:
id | name | category_code
---+------------+--------------
11 | 'Cookies' | '43040'
53 | 'Potatoes' | '43100'
这些类别代码按等级工作,例如开头 43
可能表示食物,结尾 04
糕点或结尾 10
根菜 tables。
我也有一个 table 代码名称,如下所示:
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 + '%')
。我怎样才能通过其他方式实现这个目标?
我想这就是你想要的。 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']);
我有一个项目列表,每个项目都有一个类别代码:
id | name | category_code
---+------------+--------------
11 | 'Cookies' | '43040'
53 | 'Potatoes' | '43100'
这些类别代码按等级工作,例如开头 43
可能表示食物,结尾 04
糕点或结尾 10
根菜 tables。
我也有一个 table 代码名称,如下所示:
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 + '%')
。我怎样才能通过其他方式实现这个目标?
我想这就是你想要的。 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']);