MySQL-使用列值加入同一查询

标签 mysql sql join

我有三个看起来像这样的表:

连接

|ID|JOIN_NAME|
 1  persons
 2  companies

信息

|ID|JOIN_ID|
 1  1
 2  2

information_extra_persons

|ID|INFORMATION_ID|NAME|
 1  1              John

information_extra_companies

|ID|INFORMATION_ID|NAME|
 1  2              IBM

如何在一个 SQL 中将这些表连接在一起?我尝试过类似的方法:

SELECT * FROM `information`
INNER JOIN `information_extra_(SELECT `name` FROM `joins` WHERE `id` = `join_id`)`
ON `information_extra_(SELECT `name` FROM `joins` WHERE `id` = `join_id`)`.`information_id` = `information`.`id`

但我无法让它工作。当然这不是我实际的 table 设置,但原理是一样的。有谁知道如何通过一条 SQL 获取所有信息?

最佳答案

这实际上是四个表,而不是三个。这不仅仅是一个挑剔 - 看起来你的问题的实质是“我如何使用表的名称作为连接标准的一部分?” (即如何将 information_extra_ 表视为单个表?)

答案是:你不能。 (动态 SQL 之外。)

在这种特定情况下,以下内容应返回我认为您正在寻找的内容:

select j.join_name joined_entity,
       case when j.join_name = 'persons' then p.name
            else c.name
       end joined_entity_name
from information i
inner join joins j on i.join_id = j.id
left join information_extra_persons p on i.id = p.information_id
left join information_extra_companies c on i.id = c.information_id

或者,效率较低(但更通用)的方法可能是:

select j.join_name joined_entity,
       v.name joined_entity_name
from information i
inner join joins j on i.join_id = j.id
inner join (select 'persons' entity, information_id, name from information_extra_persons
            union all
            select 'companies' entity, information_id, name from information_extra_companies) v
           on i.id = v.information_id and j.join_name = v.entity

关于MySQL-使用列值加入同一查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7952036/

相关文章:

mysql - grails 域默认按上次更新字段排序

mysql - SQL 返回 NULL 而不是空结果

mysql - 如何在 SQL 中查找所有最常见的值?

sql - 需要返回一个值,当某个日期范围内不存在该值时,该值的计数为 0

mysql - 加入合并(公式1、公式2、公式3)

MySQL 查询组合来自多个表的总和

mysql - 从单列数据创建多列 View

php - 填充多维数组

php - 为电子商务生成高度独特的字符串

使用临时表时 SQL Server 描述第一个结果集失败 (sp_describe_first_result_set)