views:

29

answers:

1

This is a dumbed down version of the real table data, so may look bit silly.

Table 1 (users):

id INT
username TEXT
favourite_food TEXT
food_pref_id INT

Table 2 (food_preferences):

id INT
food_type TEXT

The logic is as follows:

Let's say I have this in my food preference table:

1, 'VEGETARIAN'

and this in the users table:

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

In which case John defaults to be a vegetarian, but Pete should show up as a person who enjoys curry.

Question, is there any way to combine the query into one select statement, so that it would get the default from the preferences table if the favourite_food column is NULL?

I can obviously do this in application logic, but would be nice just to offload this to SQL, if possible.

DB is SQLite3...

+1  A: 

You could use COALESCE(X,Y,...) to select the first item that isn't NULL.

If you combine this with an inner join, you should be able to do what you want.

It should go something like this:

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

I don't have a SQLite database handy to test on, however, so the syntax might not be 100% correct, but it's the gist of it.

Sebastian P.
worked a treat, thank you!
pulegium