我必须维护一个数据库,该数据库为其用户提供了3个不同的表(针对不同的角色)。不幸的是,不允许合并它们。
还有另一个表记录了他们的活动,该表有两列用于标识特定用户,一列是userId
,另一列是roleId
。现在,当我想列出所有用户的用户活动时,那么根据roleId
中的值,我必须使用不同的表连接每一行。
如果只有一个用户表,则查询类似于:
SELECT * FROM activity JOIN buyers ON activity.userId = buyers.id
那么,如果我有3个包含用户的表格,我现在如何扩展此查询:buyers
,sellers
和administrators
;知道roleId
表格中的activity
列标识买方,卖方或管理员?
答案 0 :(得分:0)
SELECT *, 'Buyer' as accountType FROM activity JOIN buyers b ON activity.userId = b.id
UNION
SELECT *, 'Seller' FROM activity JOIN sellers s ON activity.userId = s.id
UNION
SELECT *, 'Admin' FROM activity JOIN administrators a ON activity.userId = a.id
考虑到我无法改变任何现有的表格设计,可以考虑将上述内容视为我可以根据需要构建的视图。
如果买家,卖家和管理员拥有不同的列,可能还必须拼出特定的表格列。鉴于您没有提供表结构,我假设它们在此示例目的中是相同的。
答案 1 :(得分:0)
这里只是猜测roleId与其他表的关系。
SELECT * FROM activity JOIN buyers ON activity.userId = buyers.id
WHERE activity.roleId = 1
UNION SELECT * FROM activity JOIN sellers ON activity.userId = sellers.id
WHERE activity.roleId = 2
UNION SELECT * FROM activity JOIN administrators ON activity.userId = administrators.id
WHERE activity.roleId = 3