gpt4 book ai didi

mysql - 这个 MySQL 查询有什么问题 - Left Outer Join

转载 作者:行者123 更新时间:2023-11-28 23:14:16 25 4
gpt4 key购买 nike

我的数据库中有三个表,我们称它们为:1. 值类型2.值(value)观3. 组织

每个值都有一个指向 value_type 和 org 的外键引用。此外,每个值类型还有一个默认值。

我正在尝试对所有组织进行左外连接,这样如果值表中存在一条记录,它将返回该记录中的值,如果该记录不存在,它将采用默认值值类型表。但是,当我运行以下查询时,它会为值表中尚不存在记录的所有组织返回空值。

SELECT 
o.id as org_id,
o.name as org_name,
case when vals.choice is null then vals.default_value else vals.choice END as select_choice,
vals.choices as choices
FROM orgs o
LEFT OUTER JOIN
(SELECT
v.id as id,
v.choice as choice,
v.org_id as org_id,
v.name as val_name,
vt.default_value as default_value,
vt.choices as choices
FROM value v
INNER JOIN value_type vt ON v.value_type = vt.id
WHERE vt.name = 'xyz') vals
ON vals.org_id = o.id

最佳答案

看起来很奇怪,但也许您需要交叉连接组织到 value_Type,然后左连接到值?

这样,来自 org 的记录将列出给定名称的所有值类型;与默认值一起,然后如果记录存在值(value),我们也专门加入它。然后 coalesce 将在 vals.choice(如果存在)和我们知道将存在的交叉连接 vt.default_value 之间选择第一个非空值。

SELECT 
o.id as org_id,
o.name as org_name,
coalesce(vals.choice, VT.Default_Value)
VT.choices as choices
FROM orgs o
CROSS JOIN (SELECT id, choices, default_value FROM Value_Type where Name = 'xyz') VT
LEFT OUTER JOIN
(SELECT
v.id as id,
v.choice as choice,
v.org_id as org_id,
v.name as val_name,
v.value_Type
FROM value v) vals
ON vals.org_id = o.id
AND vals.value_type = vt.id

关于mysql - 这个 MySQL 查询有什么问题 - Left Outer Join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44575763/

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