我有一个包含两种类型用户的数据库,用户可以是个人
或组织
,它们是父用户user
的子级>,我这样做的原因是因为组织拥有一些个人
没有的属性,这与可以定义两个用户的所有属性并且必须有空字段的单个表不同,我决定创建一个 user
表,该表具有两种类型用户之间的共同属性,然后有一列保存用户类型,因此如果其 1
则该用户是一个人,所以我必须在 individual
表中查找所有其他属性,反之亦然,individual
和 organization
表保存 用户外键
来识别它,这是我的数据库表的图形表示
如果您想知道为什么我没有制作一个表,我计划随着应用程序的增长向用户和组织表添加更多属性,留出扩展空间,所以这是我的问题,我想要一个用户的数据,我已经有了他们的 ID,但是如何检查 userType 并指向下一组属性的正确表,例如,如果一个名为 John 的用户,其 Id 为 2 并且位于单独的表中,我该如何获取他们的名字和姓氏?
我对查询的想法是这样的:
Select users.email, users.profilePhoto, users.userSince, CASE WHEN userType = 1 THEN SELECT individual.fname, individual.lname WHERE users.id = 1 AND individual.userFK = 1 END FROM users
但是我不熟悉CASE
语句,所以我总是收到错误,任何愿意提供帮助的人,非常欢迎。
最佳答案
您正在尝试在 SELECT
部分中构建数据集,但 SELECT
部分仅用于更改输出,而不是输入,也不用于构建数据集。
数据集是使用 WHERE
语句结合 JOIN
交叉选择构建的。
可以使用GROUP BY
完成聚合,但您现在不需要这样做。
SELECT
u.*,
i.*,
o.*
FROM users u
LEFT JOIN individual i
ON i.userFK = u.userFK
LEFT JOIN organization o
ON o.userFK = u.userFK
关于mysql - 使用CASE的SQL查询问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40587182/