Подстановка значений в SQLite, где JOIN не находит соответствия - PullRequest
2 голосов
/ 14 марта 2011

Я новичок в 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

Теперь, если бы пользователь должен был удалить Билла из таблиц-имен, эта же строка запроса выдала бы:

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 Ответ

4 голосов
/ 14 марта 2011

Конечно, вы делаете внутреннее соединение, просто измените его на левое внешнее соединение.

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...