SQLite替换JOIN找不到匹配项的值

时间:2011-03-14 20:31:48

标签: sqlite join

我是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

感谢您的帮助。

1 个答案:

答案 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);
相关问题