Sélectionnez à partir d'une autre table si la valeur existe pas
J'ai créé un violon pour cela, à ce lien:
http://www.sqlfiddle.com/#!2/7e007
Je pouvais pas trouver SQL compact /EC, il est donc dans MySQL.
Les tables ressemble à ceci
Records Clients
ID | NAME | AGE ID | NAME
------------------ ----------------
1 | John | 20 1 | John
2 | Steven | 30 2 | Daniel
3 | Abraham | 30 3 |
4 | Donald | 25 5 | Lisa
6 | | 35 6 | Michael
7 | | 42 7 |
Je voudrais sélectionner à partir des deux tables, et si l'id est dans les deux tables, et les deux ont des noms, je voudrais que le nom de "Clients" comme valeur par défaut. Si le nom d'Enregistrements est vide, utilisez le nom du client (le cas échéant) et si les Clients.Le nom est vide; utiliser les enregistrements.Nom.
À partir des tableaux ci-dessus, je voudrais que ce:
ID | NAME | AGE
------------------
1 | John | 20
2 | Daniel | 30
3 | Abraham | 30
4 | Donald | 25
5 | Lisa |
6 | Michael | 35
7 | | 42
Comment puis-je le faire en SQL Compact?
EDIT:
Grâce à d'excellentes réponses ci-dessous, j'ai réussi à venir avec cette requête, qui fonctionne PRESQUE:
SELECT t.id, t.name, t.age FROM
(
(
SELECT r.id,
CASE WHEN r.name = NULL THEN c.name ELSE r.name END as name,
r.age
FROM Records r
LEFT JOIN Clients c ON c.id = r.id
)
UNION
(
SELECT c.id, c.name, null as age FROM Clients c where c.id NOT IN (select id from Records)
)
) as t ORDER BY t.id
Cela me donne ce résultat:
ID | NAME | AGE
------------------
1 | John | 20
2 | Daniel | 30
3 | Abraham | 30
4 | Donald | 25
5 | Lisa |
6 | | 35
7 | | 42
"Michael" (qui devrait être sur le #6) est manquante dans ce cas. Pourquoi?!
- l'utiliser dans le cas de la partie:
CASE WHEN c.name <> ''
- essayé ce ainsi, même résultat. "lors de la c.le nom n'est nulle utiliser c.nom de d'autre de la r.nom". "Michael" est manquante, ce qui est vraiment déroutant.
- désolé! vous étiez complètement à droite. <> NULL était mauvais (même si le post est en fait nulle), mais quand j'ai changé de <> " il a travaillé. Je vais vous donner votre réponse le cred. thx!
Vous devez vous connecter pour publier un commentaire.
Utiliser la requête ci-dessus.
ÉDITÉ:
Utiliser cette requête.
CASE WHEN c.name = NULL OR c.name = ''
utiliser leCASE WHEN c.name = ''
seulements'il vous plaît essayer,j'espère que ça va fonctionner..
cheers!!!
Utilisation COALECSE pour obtenir le premier non-valeur null:
EDIT: Dans le cas où n'existent pas les noms sont stockés en tant que " au lieu de NULL utilisation:
Bien sûr, vous pouvez également réagir sur deux " et NULL en demandant
Voir http://www.sqlfiddle.com/#!2/7e007/36.