假设我有如下表结构:
TABLE session
int entity_id
int user_id
int status
TABLE entity_user
int entity_id
int user_id
int target
session
表记录了不同用户在不同实体上的交互。 entity_user
表指定哪些用户可以访问每个实体。值得注意的是,每个用户都可以访问多个实体。
我想根据某些标准从 session
表中选择(实体,用户)对,例如。一个特定的状态。检索到这些对后,我想在 entity_user
表中为每一对查找相应的目标。
有没有办法在 SQL 中干净地执行此操作,最好是使用单个查询?
到目前为止,我的解决方案是选择对,进行一些离线文本处理以将它们连接起来(使用分隔符),然后使用该文本。因此:
SELECT entity_id, user_id FROM session WHERE status = 100;
-- Returns (101, 234), (204, 157), etc.
-- Post-process this result using # as a separator
SELECT entity_id, user_id, target FROM entity_user
WHERE CONCAT(user_id, '#', entity_id) IN ( '101#234', '204#157', ...)
这行得通,但我觉得在 SQL 中应该有一种纯粹的方式来做到这一点。有什么建议吗?
最佳答案
可以结合子查询和连接来完成。
SELECT * FROM (
SELECT entity_id, user_id FROM session WHERE status = 100 ) as s
LEFT JOIN entity_user ON s.entity_id = entity_user.entity_id and s.user_id = entity_user.user_id
关于mysql - 如何基于成对的列(它们本身是 SELECT 的结果)选择数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40540587/