如何加入条件表

时间:2014-11-14 16:37:13

标签: mysql join

我必须维护一个数据库,该数据库为其用户提供了3个不同的表(针对不同的角色)。不幸的是,不允许合并它们。

还有另一个表记录了他们的活动,该表有两列用于标识特定用户,一列是userId,另一列是roleId。现在,当我想列出所有用户的用户活动时,那么根据roleId中的值,我必须使用不同的表连接每一行。

如果只有一个用户表,则查询类似于:

SELECT * FROM activity JOIN buyers ON activity.userId = buyers.id 

那么,如果我有3个包含用户的表格,我现在如何扩展此查询:buyerssellersadministrators;知道roleId表格中的activity列标识买方,卖方或管理员?

2 个答案:

答案 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