mysql - 使用CASE的SQL查询问题

标签 mysql case

我有一个包含两种类型用户的数据库,用户可以是个人组织,它们是父用户user的子级>,我这样做的原因是因为组织拥有一些个人没有的属性,这与可以定义两个用户的所有属性并且必须有空字段的单个表不同,我决定创建一个 user 表,该表具有两种类型用户之间的共同属性,然后有一列保存用户类型,因此如果其 1 则该用户是一个人,所以我必须在 individual 表中查找所有其他属性,反之亦然,individualorganization 表保存 用户外键 来识别它,这是我的数据库表的图形表示 enter image description here

如果您想知道为什么我没有制作一个表,我计划随着应用程序的增长向用户和组织表添加更多属性,留出扩展空间,所以这是我的问题,我想要一个用户的数据,我已经有了他们的 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/

相关文章:

MySQL 查询 - 将 3 个表连接在一起,按一列分组并计算其他 2 个表

sql - “Case 语句”可以安全地用于 JDBC 的常规/准备语句中吗?

sql-server - 当日期字段为 1/1/1900 时显示空字符串

php - MySQL - 检查查询的前 6 个字符以确保它是 SELECT 是否安全?

php - 我需要回显从另一个页面上的 mysql 填充的下拉选择

mysql - SQL 别名不起作用

mysql case 语句,有些有效,有些无效

mysql - MySql 中某行的计算值为空时的情况

sql - 使用 CASE 语句更新 SELECT 查询

MySQL游标: unknown column "done" in 'field list'