我有三个看起来像这样的表:
表joins
|ID|JOIN_NAME|
1 persons
2 companies
表
information
|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`
但我无法正常工作。当然,这不是我的实际表设置,但这是相同的原理。有谁知道如何在一个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 - MySQL-使用列值加入同一查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7952036/