将一个表的查询结果与另一个表的默认值组合在一起

时间:2010-04-17 17:25:14

标签: sql optimization sqlite

这是真实表格数据的一个愚蠢版本,所以可能看起来有点傻。

表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 ......

1 个答案:

答案 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%正确,但它是它的要点。