我是SQLite的新手,我正在尝试创建连接表的视图,其中table_results引用table_names。用户可以在table_names中添加,编辑和删除项目,但是他们无法更改table_results中的引用。我想要完成的是,如果删除了table_names中的一个条目,在JOIN中,table_names ON(table_results.name_id = table_names._id)将返回table_results中的所有行,但删除了一个名称条目将显示“NO NAME” “
示例:
table_names:
_id name
1 John
2 Bill
3 Sally
4 Nancy
table_results:
_id name_id score_1 score_2
1 1 50 75
2 4 80 60
3 2 83 88
4 3 75 75
5 2 93 95
where:
Select table_results._id table_names.name, table_results.score_1, table_results.score_2
FROM table_results
JOIN table_names ON (table_reults.name_id = table_names._id);
produces:
1 John 50 75
2 Nancy 80 60
3 Bill 83 88
4 Sally 75 75
5 Bill 93 95
现在,如果用户要从table_names中删除Bill,则相同的查询字符串将产生:
1 John 50 75
2 Nancy 80 60
4 Sally 75 75
我的问题: 当连接找不到匹配项时,有没有办法让查询替换值?我想上面的例子产生以下输出,但我不知道如何为SQL编写查询字符串。
1 John 50 75
2 Nancy 80 60
3 NO NAME 83 88
4 Sally 75 75
5 NO NAME 93 95
感谢您的帮助。
答案 0 :(得分:4)
当然,你正在进行内连接,只需将其更改为左外连接..
SELECT table_results._id
,COALESCE(table_names.name, 'NO NAME') AS [name]
,table_results.score_1
,table_results.score_2
FROM table_results
LEFT OUTER JOIN table_names
ON (table_reults.name_id = table_names._id);