首页 > 解决方案 > 如何根据匹配数组中包含的值执行 INNER JOIN,该数组本身就是表的字段?

问题描述

user_table目前我们通过简单的keyword_table匹配来执行内部连接user_table.id = keyword_table.userId

以我的智慧,我决定修改keyword_table,以便将单个userId 存储在特定关键字的数组中。字段 ,userId现在是一个包含 userIds 的数组。

如何根据user_table.id包含在执行内部联接keyword.userId

之前:

FROM user_table
INNER JOIN keyword_table ON user_table.id = keyword_table.userID

现在:

FROM user_table
INNER JOIN keyword_table ON user_table.id included in keyword_table.userID

我知道IN操作员,但我不确定这如何用于内部连接。我没有使用任何外键。

标签: sqlpostgresql

解决方案


您可以使用>@

FROM user_table ut INNER JOIN
     keyword_table kt
     ON kt.userID @> ARRAY[ut.id]

或者:

     ON array_position(kt.userID, ut.id) > 0

或者:

     ON u.id = any(kt.userID, ut.id)

或者,我通常会做的事情:

FROM user_table ut INNER JOIN
     keyword_table kt JOIN
     unnest(kt.userId) u(userId)
     ON u.userID = ut.id

推荐阅读