我在一个Android应用程序的SQLite数据库中有3个表。下图显示了我正在使用的相关表格。
我试图从测量线和能力中分别得到两个字段,值和名称,与测量中的特定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
然而,这有一个问题。当人在测量中没有条目时(并且随后在measurement_lines中没有任何内容),此查询将不返回任何记录。我想要的是始终获得一个能力名称列表,即使值列为空。我猜我需要一个左外连接,但我似乎无法使其工作。以下查询只返回没有记录:
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
答案 0 :(得分:2)
对于内连接,您可以通过连接条件和选择谓词之间的区别来草拟,但是当涉及外连接时会产生差异。 {/ 1}}子句中出现的任何条件都会在执行所有连接之后(至少逻辑地)过滤结果行,这可以删除与外部表关联的结果行。
此外,如果您不确定加入订单,可以使用括号来明确您的意图。至少在许多DBMS中。它像SQLite一样不支持它们。
看起来您可能想要这样:( 编辑以避免使用括号)
WHERE