2013-02-05 6 views
2

J'ai deux tables par exemplerequête SQLite de deux tables - Choisissez la valeur à retourner

Tableau 1

ID | Prop1 | Prop2 | Prop3 
-------------------------------- 
1 | a | b  | c 
2 | d | e  | f 

Tableau 2

Name | ID | Prop1 | Prop2 
------------------------------- 
i | 1 | aa | null 

Ce que je voudrais faire est de retour (ne pas modifier) ​​la ligne de Table1 correspondant à l'ID de Table2.Name = 'i' mais avec les valeurs de Table2 qui ne sont pas nulles (si elles existent). Le résultat devrait alors ressembler à:

ID | Prop1 | Prop2 | Prop3 
-------------------------------- 
1 | aa | b  | c 

Répondre

1

Vous pouvez utiliser IFNULL(x, y) pour remplacer une valeur pour NULL:

SELECT 
    t1.ID 
    ,IFNULL(t2.Prop1, t1.Prop1) AS Prop1 
    ,IFNULL(t2.Prop2, t1.Prop2) AS Prop2 
    ,IFNULL(t2.Prop3, t1.Prop3) AS Prop3 
FROM 
    Table1 t1 
LEFT JOIN 
    Table2 t2 
    ON 
    t1.ID = t2.ID 

Notez que IFNULL() n'accepte jamais deux arguments. Si vous pensez que vous pourriez ajouter plus de tables à un moment donné, passer à COALESCE():

SELECT 
    t1.ID 
    ,COALESCE(t2.Prop1, t1.Prop1) AS Prop1 
    ,COALESCE(t2.Prop2, t1.Prop2) AS Prop2 
    ,COALESCE(t2.Prop3, t1.Prop3) AS Prop3 
FROM 
    Table1 t1 
LEFT JOIN 
    Table2 t2 
    ON 
    t1.ID = t2.ID 
+0

Je ne savais pas IFNULL fonction (seulement deux semaines que je apprends db ;-)). Merci ! – GuillaumeA

Questions connexes