我有我的数据库中的三个表,让我们称他们为: 1. VALUE_TYPE 2.值 3.机构单位哪些错误与此MySQL查询 - 左外连接
每个值有一个外键引用一个value_type和一个组织。此外,每个值类型也有一个默认值。
我正在尝试为所有组织执行左外部联接,以便如果值表中存在记录,它将返回该记录中的值,并且如果该记录不存在,则将采用默认值value_type表。但是,当我运行以下查询时,它将为所有组织中的记录不存在于值表中的所有组织返回空值。
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
好吧...如果vals.org_ID不存在o.id,那么所有vals.records都将为null,因此您的case语句将始终为这样的记录返回Null值。换句话说,因为组织中没有val的记录,所以不能以这种方式得到默认值。 – xQbert
value_type和orgs如何关联?我们如何知道为组织选择了什么样的价值类型,或者为什么你只限于'xyz'的vt.name?这只会导致1条记录? – xQbert
通常如果你想要一个默认值,它不是基于外键关系,它是一个特殊的行,被认为是默认值,而不是与该值相同行中的另一列。您可以通过单独的连接来获得该行的ID。你能展示一些样本数据和预期结果吗? – Barmar