sql - 如何根据匹配数组中包含的值执行 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
操作员,但我不确定这如何用于内部连接。我没有使用任何外键。
解决方案
您可以使用>@
:
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