MySQL从table2中选择数据,其中table1.field相等(并将其添加到结果中)

标签 mysql sql

我有一个 Profiles 表、一个 Workers 表和一个 Studios 表。

我的个人资料表如下所示:

mysql> select * from Profiles;
    | profile_id | owner_luser_id | profile_type | profile_name | profile_entity_name | description | profile_image_url | search_rating |

我的 Studios 和 Workers 表基本上包含有关实体的扩展数据,具体取决于设置为 [Worker, Studio] 的 profile_type (ENUM)。

我需要知道如何执行单个 SQL 查询来从配置文件中检索(所有)配置文件数据,但仅连接到结果的末尾、Studios 或 Workers 表中的特定字段,具体取决于该实体是工作室还是 worker 。

我尝试过 UNION 但没有成功(UNION 要求所有表具有相同数量的字段?,这似乎不是我正在寻找的)。

我尝试过 JOIN 也没有成功;如果我加入 Profiles.profile_type = 'Worker',它只会显示 Workers。

我只是希望能够从 Worker 或 Studio 表中向结果添加其他列,具体取决于 Profiles.profile_type 是什么。

我的架构的 SQLFiddle 位于 http://sqlfiddle.com/#!2/3f599/1 - 我想(例如)从配置文件中选择 *,但根据 profile_type 是什么,在该结果的末尾加入 Worker 或 Studio 的许可证号(分别为 Workers.license_number、Studios.premises_license_number),并调用该列例如“profilelicense_number”。

最佳答案

我想这就是你想要的:

SELECT p.*,
       case
         when w.license_number is not null then
          w.license_number
         when s.premises_license_number is not null then
          s.premises_license_number
         else
          null
       end as profilelicense_number
  FROM Profiles p
  LEFT JOIN Studios s
    on p.profile_id = s.profile_id
  LEFT JOIN Workers w
    on p.profile_id = w.profile_id

关于MySQL从table2中选择数据,其中table1.field相等(并将其添加到结果中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21969498/

相关文章:

mysql - 需要帮助连接到本地服务器上的Mysql数据库

mysql - 如何将 max 和 min 的输出加在一起以获得总和

php - 删除不在INSERT语句mysql中的行

mysql - 从 MySQL 列中的所有数据中删除最后一位数字

MySQL-一次更新记录组

sql - 如何删除 SQL 中的重复行(Clickhouse)?

mysql - 更新选定的行

Mysql JOIN 获取指定列数据语法错误

关于表的 mysql 详细信息

mysql - 如何更改带有 #(哈希)符号的 MySQL 列名