postgresql - 带有 LIKE 条件的内部连接
问题描述
我使用 Postgres 11,我有这个查询:
select sessions.*
from sessions
INNER JOIN map ON (sessions.customer = map.customer)
WHERE map.prr @> ARRAY['A4']
order by session_start DESC;
现在这给了我结果,但它遗漏了一些客户的名字。我在会话表中的客户名称如下:bmw honda bmw-12345
-然后此查询将仅显示bmw honda
。
在地图中,客户名称没有-12345
(或任何数字),但我需要使用它,LIKE
所以如果 map.customer 有bmw
并且 sessions.customer 有bmw-888
,bmw
它会同时显示两者。
我已经尝试过那里的陈述,但它没有给我需要的结果或给出错误:
roles=# select sessions.*
from sessions
INNER JOIN map ON map.customer LIKE '%' + CONCAT(CONCAT('%',sessions.customer),'%') + '%'
WHERE map.prr @> ARRAY['A4']
order by session_start DESC;
ERROR: operator does not exist: unknown + text
LINE 1: ..._sessions INNER JOIN map ON map.customer LIKE '%' + CONCAT(C...
^
HINT: No operator matches the given name and argument types. You might need to add explicit type casts.
select sessions.* from sessions INNER JOIN map ON (sessions.customer LIKE map.customer) WHERE map.prr @> ARRAY['A4'] order by session_start DESC;
select sessions.* from sessions INNER JOIN map ON (map.customer LIKE sessions.customer) WHERE map.prr @> ARRAY['A4'] order by session_start DESC;
现在的最终结果:
session_start | session_end | duration | customer
----------------------------+----------------------------+-----------------+----------
2020-12-28 09:39:15.477601 | 2020-12-28 09:39:48.80666 | 00:00:33.329059 | Honda
2020-12-28 09:31:37.841083 | 2020-12-28 09:31:44.154253 | 00:00:06.31317 | Honda
2020-12-28 09:29:50.399863 | 2020-12-28 09:30:35.259193 | 00:00:44.85933 | bmw
结果应该是:
session_start | session_end | duration | customer
----------------------------+----------------------------+-----------------+----------
2020-12-28 09:39:15.477601 | 2020-12-28 09:39:48.80666 | 00:00:33.329059 | Honda
2020-12-28 09:31:37.841083 | 2020-12-28 09:31:44.154253 | 00:00:06.31317 | Honda
2020-12-28 09:29:50.399863 | 2020-12-28 09:30:35.259193 | 00:00:44.85933 | bmw
2020-10-06 14:08:21 | 2020-10-06 14:08:23.109767 | 00:00:02.109767 | bmw-775648
2020-10-06 13:48:44 | 2020-10-06 13:48:45.950197 | 00:00:01.950197 | honda-775648
解决方案
||
SQL 中的字符串连接运算符+
是数字相加的符号。但是你已经用你内心最深处的表达有了正确的concat()
表达。只需删除其他无用的东西:
JOIN map ON map.customer LIKE CONCAT('%',sessions.customer,'%')
请注意,这仅解决语法错误。我不清楚您的数据是否确实与此表达式匹配。整个数据模型似乎一开始就是错误的。
推荐阅读
- git - 将提交转移到新的远程
- c# - 将 IMessage Protobuf 序列化为 json C#
- intellij-idea - 无法在 IntelliJ IDEA“数据库”插件中显示 Hive 表
- reactjs - 如何使用 redux 从我自己的 api 中获取数据?
- android - Android 评分栏只显示一颗星
- flutter - 从底部颤动的页面弹出
- vue.js - Vue.js如何避免不同功能中的重复代码?
- javascript - TypeError:Mobile Safari 中 pubads_impl_XXX.js 中的非法调用
- ruby-on-rails - Ruby on Rails - 在某些字段验证失败后丢失表单值
- sapper - 预加载不会在导入到 _layout 的组件上运行