这是真实表格数据的一个愚蠢版本,所以可能看起来有点傻。
表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
在这种情况下,约翰默认是素食主义者,但是皮特应该出现在喜欢咖喱的人身上。
问题,有没有办法将查询合并到一个select语句中,以便如果favourite_food列为NULL,它将从首选项表中获取默认值?
我显然可以在应用程序逻辑中执行此操作,但如果可能的话,只需将其卸载到SQL即可。
DB是SQLite3 ......
答案 0 :(得分:1)
您可以使用COALESCE(X,Y,...)
选择非NULL的第一个项目。
如果将其与inner join结合使用,您应该可以按照自己的意愿行事。
它应该是这样的:
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%正确,但它是它的要点。