gpt4 book ai didi

sqlite - 用左外连接链接 3 个表

转载 作者:行者123 更新时间:2023-12-03 18:50:44 24 4
gpt4 key购买 nike

我在 Android 应用程序的 SQLite 数据库中有 3 个表。下图显示了我正在使用的相关表格。

Tables

我试图分别从measurement_lines 和competences 中获取两个字段,value 和name,它们与测量中的特定person_id 相关联。我正在尝试进行返回这些字段的查询,但我运气不佳。到目前为止,我得到的最好的是以下查询:

SELECT name, value
FROM measurements, measurement_lines, competences
WHERE measurements.id = measurement_lines.measurements_id
AND measurement_lines.competences_id = competences.id
AND measurements.persons_id = 1

然而,这有一个问题。当一个人在测量中没有条目时,此查询将不会返回任何记录(随后,在测量行中也没有任何条目)。我想要的是始终获得能力名称列表,即使值列是空的。我猜我需要一个左外连接,但我似乎无法让它工作。以下查询不返回任何记录:
SELECT name, value 
FROM measurements AS m, competences AS c
LEFT OUTER JOIN measurement_lines AS ml ON c._id = ml.competence_id
WHERE ml.measurement_id = m._id AND m.persons_id = 1

最佳答案

对于内部连接,您可能会对连接条件和选择谓词之间的区别感到草率,但是当涉及到外部连接时,情况就会有所不同。 WHERE 中出现的任何标准子句在执行所有连接后过滤您的结果行(至少在逻辑上),这可以删除与外部表关联的结果行。

此外,如果您不确定连接顺序,可以使用括号来明确您的意图。至少在许多 DBMS 中。它看起来像 SQLite 不支持它们。

看起来你可能想要这个:(编辑以避免使用括号)

SELECT c.name, pm.value
FROM competences c
LEFT OUTER JOIN (
SELECT ml.competences_id AS cid,
ml.value AS value
FROM measurement_lines ml
INNER JOIN measurements m
ON m.id = ml.measurements_id
WHERE m.person_id = 1
) pm
ON pm.cid = c.id

关于sqlite - 用左外连接链接 3 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26806495/

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