2012-10-25 5 views
-1

J'ai les tables a et b, chacune a un champ moyen. Les données sont insérées dans une seule des tables à la fois, de sorte que l'un ou l'autre des champs moyens peut rester nul à un moment donné. Comment puis-je récupérer la valeur dans l'un des champs dans les deux tableaux qui est non nulRécupérer une valeur de chaque table mysql

Table a 
id average labref 
1 325  123 

Table b 
id average labref 
2 null 123 

Si la table un est celui avec la valeur moyenne, je prends cette valeur et si la table la prochaine fois que b est un avec la valeur moyenne et la table un est la moyenne est nulle, je prends la valeur de la table a. Ils ont tous deux le même id utilisé appelé labref!

+2

Quelle est la corrélation entre les tables? Devraient-ils correspondre sur ID? Est-ce que les identifiants existent dans les deux tables? (avoir une valeur de NULL en avarage est différent de n'avoir aucun enregistrement). – GolezTrol

+0

Les tables ont une même valeur appelée champ labref qui contient la même valeur – Alphy

+0

Gomez, ont mis les champs à null – Alphy

Répondre

0
select average from (
select average from tablea 
union 
select average from tableb) a 

where average is not null 

OU

select CASE WHEN a.average is null then b.average else a.average end average from tablea a inner join table b 
on a.labref=b.labref 
+0

Merci beaucoup, cela a fonctionné comme un charme – Alphy

+0

Notez que la première requête ne retournera que des valeurs ** distinctes ** de moyenne (de sorte que si le même chiffre moyen est enregistré pour plusieurs labrefs, cette moyenne ne sera retournée qu'une fois), tandis que la seconde requête ne retournera que des moyennes où la même lettre est enregistrée dans ** les deux ** tables. –

0
SELECT 
    IF(a.average IS NULL, b.average, a.average) AS average 
FROM 
    a, b 
where a.id = b.id 
+0

Vous pouvez simplement utiliser 'IFNULL' ou le plus générique' COALESCE'. – GolezTrol

+0

Yup ... juste pour la connaissance, quel est le meilleur en performance? 'ternaire IF',' IFNULL' ou 'COALESCE'? – hemu

-1

Pouvez-vous utiliser la fonction de la manière suivante IFNOTNULL():

select IFNOTNULL(average,(select average from b)) from a 

I cela et havent testé am va du haut de ma tête.

-1

Vous pouvez essayer cette

select average from a, b where a.average IS NOT NULL and b.average IS NOT NULL 

Je ne suis pas sûr d'utiliser IS NOT NULL deux fois ou non.

0

Essayez:

select labref, max(average) from 
(select labref, average from a union all 
select labref, average from b) ab 
group by labref 
+0

Cela fonctionnera probablement, mais il existe de meilleures options qui montrent plus clairement ce qui se passe et qui fonctionneront probablement mieux sur les grandes tables. – GolezTrol

+0

@GolezTrol: Une jointure risque d'être bien pire qu'une union pour les grandes tables. –

+0

Peut-être, mais pas si vous regroupez l'union par la suite. – GolezTrol

Questions connexes