gpt4 book ai didi

sql - 用于连接 sql 表的 CASE

转载 作者:行者123 更新时间:2023-12-01 11:00:48 26 4
gpt4 key购买 nike

我需要 sql 数据库方面的帮助。我有

表 1:ENTITY_TYPE

entity_type_id  entity_name
1 Task
2 Page
3 Project
4 Message
5 User

和表 2:MESSAGE,包含来自每个实体值的消息,例如

message_id entity_type owner_tableid message
1 1 12 A message on task level
2 3 14 A message on project level

我想根据每个实体类型和使用“owner_tableid”从其所有者表中的详细信息选择这些消息,即像...这样的查询。

select * from MESSAGE JOIN
case entity_type when 1 then taskTable
when 2 then pageTable
when 3 then projectTable
when 4 then MessageTable
when 5 then UserTable

哪个是在单个过程中解决此问题的最佳方法。任何想法 ??现在我正在为每个实体使用 IF 子句...

最佳答案

您不能参数化查询中涉及的(因此您不能将表名放在变量中并期望它也被使用)。

一种方法是作为左连接链:

select
* /* TODO - Pick columns */
from
MESSAGE m
left join
taskTable tt
on
m.entity_type = 1 and
m.owner_entity_id = tt.id
left join
pageTable pt
on
m.entity_type = 2 and
m.owner_entity_id = pt.id
left join
projectTable prt
on
m.entity_type = 3 and
m.owner_entity_id = prt.id
left join
MessageTable mt
on
m.entity_type = 4 and
m.owner_entity_id = mt.id
left join
UserTable ut
on
m.entity_type = 5 and
m.owner_entity_id = ut.id

如果您希望这些表中的值出现在结果的单个列中,请对所有值使用 COALESCE,例如

COALESCE(tt.Value,pt.Value,prt.Value,mt.Value,ut.Value) as Value

关于sql - 用于连接 sql 表的 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11027780/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com