2010-04-17 4 views
1

Il s'agit d'une version simplifiée des données réelles de la table, ce qui peut sembler un peu stupide.Combinaison des résultats de la requête d'une table avec les valeurs par défaut d'une autre

Tableau 1 (utilisateurs):

id INT 
username TEXT 
favourite_food TEXT 
food_pref_id INT 

Tableau 2 (food_preferences):

id INT 
food_type TEXT 

La logique est la suivante:

Disons que j'ai dans ma table de préférences alimentaires :

1, 'VEGETARIAN' 

et cela dans la table des utilisateurs:

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

Dans ce cas par défaut John d'être végétarien, mais Pete devrait apparaître comme une personne qui aime le curry. Question, existe-t-il un moyen de combiner la requête en une instruction select, de sorte qu'elle obtiendrait la valeur par défaut de la table des préférences si la colonne favourite_food est NULL?

Je peux évidemment le faire dans la logique de l'application, mais ce serait bien de le décharger en SQL, si possible.

DB est SQLite3 ...

Répondre

1

Vous pouvez utiliser COALESCE(X,Y,...) pour sélectionner le premier élément qui est NULL.

Si vous combinez cela avec un inner join, vous devriez être capable de faire ce que vous voulez.

Il devrait aller quelque chose comme ceci:

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 

Je n'ai pas une base de données SQLite pratique pour tester, cependant, si la syntaxe pourrait ne pas être 100% correct, mais il est l'essentiel.

+0

travaillé un régal, merci! – rytis

Questions connexes