gpt4 book ai didi

sql - 根据列值连接不同的表

转载 作者:行者123 更新时间:2023-12-04 12:19:05 29 4
gpt4 key购买 nike

我有一个表 R,它包含表 P 的外键。在表 P 中有一个列,告诉我表 P 中的记录是哪种类型。根据表存在与列 P.type 中的可能值相关的值。因此,如果在 P.type 中为 'C',则表示名为 C 的表,如果值为 'D',则表示名为 D 的表。

现在我想要一个 SELECT 语句,它分别从表 C 或 D 中给我值,具体取决于 P.type。
为了使其更复杂,结果中的列数/类型应有所不同。

SELECT r.id, r.pid, p.type, 
FROM R r
LEFT JOIN P p ON r.pid = p.pid
WHERE r.id = 123 LIMIT 1;

现在我得到了 P 表的记录。根据列类型的值,我想决定要在先前查询中加入哪个表(C 或 D)。
如果我必须连接表 D,则返回的列(结果集)应保持原样,但如果必须连接表 C,则应返回另一列。因此,SELECT 子句从

选择 r.id, r.pid, p.type FROM ...



选择 r.id, r.pid, p.type, c.name FROM ...

前置码:
SELECT r.id, r.pid, p.type(, c.name)   -- c.name my or may not be in the result depending on the joined table
FROM R r
LEFT JOIN P p ON r.pid = p.pid
if p.type = 'D' LEFT JOIN D d ON d.pid = p:pid end
if p.type = '' LEFT JOIN C c ON c.pid = p:pid end
WHERE r.id = 123 LIMIT 1;

Sind 可能要加入的可能表的数量可以扩展(p.type 的值可能会从 C 和 D 增加到 E、F、G,...)我宁愿只加入由指定的 ONE 表p.type 而不是在所有可能的表之上使用 UNION。
因此...由于结果中的列数不同,UNION 尝试以错误代码 1222 结束:

The used SELECT statements have a different number of columns.



这可能吗……怎么可能?

最佳答案

您的伪代码可以实现为:

SELECT r.id, r.pid, p.type, coalesce(d.name, c.name)  
FROM R r LEFT JOIN
P p
ON r.pid = p.pid LEFT JOIN
D d
ON p.type = 'D' and d.pid = p.pid LEFT JOIN
C c
ON p.type = '' and c.pid = p.pid end
WHERE r.id = 123
LIMIT 1;

这将起作用,假设表 CD没有多行匹配。如果是这种情况,您可能需要预先聚合结果或使用子查询。

关于sql - 根据列值连接不同的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184078/

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