【发布时间】:2018-10-18 22:22:32
【问题描述】:
为静态 ORM 展开 SQLite 数据透视查询,问题是它需要空值来表示缺失值。
table student
student_id | name
1 "Fred"
2 "Tim"
PK(`student_id`)
table grade
student_id | data_id | grade
1 1 5.0
1 2 5.0
2 2 5.0
PK(`student_id`,`data_id`),
FK(student.studentid)
FK(data.data_id)
table data
data_id | description
1 "summer"
2 "autumn"
PK(`data_id`)
我需要在结果中包含一个空行,以便静态 ORM 正确制表。在我看来,这应该意味着 LEFT 加入:
SELECT * FROM student
join grade using (student_id)
LEFT OUTER JOIN data
ON grade.data_id = data.data_id
由于 Tim 暑期考试缺席,student_id 没有一行 |表等级中的data_id PK_pair(2,1)。
查询当前返回:
sID | name | dID | grade | description
"1" "Fred" "1" "5.0" "summer"
"1" "Fred" "2" "5.0" "autumn"
"2" "Tim" "2" "5.0" "autumn"
结果中缺少此行:
sID | name | dID | grade | description
"2" "Tim" "1" null "summer"
【问题讨论】:
-
@EbyJacob 嗨。当您编辑时,尤其是当您的编辑需要审核时,请尽您所能,包括删除问候、感谢等。还要检查格式化输出——这里的列标题与数据不一致。
-
嗨。未来:用 [mvce] 更好地编写/接收/理解/回答重新编码的问题。这包括剪切 & 粘贴 & 可运行的代码。它还包括一个明确的规范--代码应该为任意输入完成什么。自然,努力寻找和表达这不仅仅是询问的一部分,而是先于和指导编码。而且很难。 (对表/查询执行此操作的最佳方法是通过其行成员资格标准,即谓词。)(虽然每个函数/程序/系统也有一个输入-输出关系谓词。)
标签: sqlite left-join composite-primary-key cross-join natural-join