Объединить результаты запроса из одной таблицы со значениями по умолчанию из другой - PullRequest
1 голос
/ 17 апреля 2010

Это глупая версия реальных данных таблицы, поэтому может показаться немного глупой.

Таблица 1 (пользователи):

id INT
username TEXT
favourite_food TEXT
food_pref_id INT

Таблица 2 (food_preferences):

id INT
food_type TEXT

Логика следующая:

Допустим, у меня есть это в моей таблице предпочтений в еде:

1, 'VEGETARIAN'

и это в таблице пользователей:

1, 'John', NULL, 1
2, 'Pete', 'Curry', 1

В этом случае Джон по умолчанию считается вегетарианцем, но Пит должен появиться как человек, который любит карри.

Вопрос, есть ли способ объединить запрос в один оператор выбора, чтобы он получал значение по умолчанию из таблицы предпочтений, если столбец favourite_food равен NULL?

Я, очевидно, могу сделать это в логике приложения, но было бы неплохо просто перенести это в SQL, если это возможно.

БД - это SQLite3 ...

1 Ответ

1 голос
/ 17 апреля 2010

Вы можете использовать COALESCE(X,Y,...), чтобы выбрать первый элемент, который не равен NULL.

Если вы объедините это с внутренним соединением , вы сможете делать то, что хотите.

Это должно выглядеть примерно так:

SELECT u.id AS id,
       u.username AS username,
       COALESCE(u.favorite_food, p.food_type) AS favorite_food,
       u.food_pref_id AS food_pref_id
FROM users AS u INNER JOIN food_preferences AS p
  ON u.food_pref_id = p.id

Однако у меня нет удобной базы данных SQLite для тестирования, поэтому синтаксис может быть не на 100% правильным, но это суть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...