【问题标题】:Join two tables on a field contais other field在一个字段上连接两个表包含另一个字段
【发布时间】:2020-06-25 12:22:27
【问题描述】:

如果一个字段包含另一个字段,如何连接两个表?示例:

在表 A 上我有一个包含数据 '000;111;222' 的字段,在表 B 上我有一个包含数据 '111' 的字段。

我想这样加入:

select * from A join B on A.field contains B.field

【问题讨论】:

标签: sql postgresql csv join


【解决方案1】:

你可以这样做:

select a.*, b.*
from a 
inner join b on b.field = any(string_to_array(a.field, ';'))

连接条件将a.field 转换为一个数组,然后检查它是否包含b.field

【讨论】:

  • 函数string_to_array不存在
  • @ItaloRodrigo:确实如此,正如您在the documentation 中看到的那样 - 也就是说,如果您正在运行 Postgres,那么您就可以使用它来标记您的问题。
  • @ItaloRodrigo: 如果函数 string_to_array 不存在,你没有使用 Postgres
  • 函数 string_to_array(record, unknown) 不存在。第一个字段是两个字段(field_a, ';', field_b) as field_1 的连接,第二个字段是一个整数
  • @ItaloRodrigo 您的第二列不能是整数,因为在您的问题中您写道:“我有一个包含数据'BBB'的字段” - 你不能拥有'BBB' 在整数列中。
【解决方案2】:

好吧,也许您给 string_to_array 提供了不正确的参数。作为替代方案,您可以使用 POSITION 函数来查找是否存在 sbustring 匹配。

with table_a (acol) as ( values('000;111;222'),('000;xxx;222') )
   , table_b (bcol) as ( values ('111'),('xxx'),('000'),('123') )
select * 
  from table_a
  join table_b on POSITION(bcol in acol) > 0;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多