J'ai table_1 avec des valeurs
select t1.id, t1.value from table_1 t1 join table2 t2 on t2.value = t1.value
et table_2 pour les mappages
|id|value| --------- 1|val1 2|OtherValue 3|SomeValue 4|val4
et j'ai besoin d'un résultat select comme:
|key|value| ----------- |val2|OtherValue| |val3|SomeValue|
Je peux faire quelque chose comme:
|id|value| ---------- |1|val1| |2|val2| |3|val3| |4|val4|
5 Réponses :
Vous devez rejoindre la valeur de table_1 sur la clé de table_2 .
SELECT
t1.id
,CASE
WHEN t2.value IS NULL THEN t1.value
ELSE t2.value
END AS value
FROM table_1 t1
LEFT JOIN table_2 t2
ON t1.value = t2.key
cela obtiendra la bonne jointure, mais il aura toujours besoin de quelque chose pour obtenir les bonnes valeurs si l'entrée n'existe pas dans t2
Oh excuses @Kevin! J'ai raté cette partie. Merci pour votre commentaire.
Vous voulez faire une jointure à gauche avec un isnull sur les valeurs
select t1.id, isNull(t2.value,t1.value) from table_1 t1 left join table2 t2 on t2.key= t1.value
SELECT
t1.id,
CASE
WHEN t2.valueIS NULL THEN t1.value
ELSE t2.value
END AS value
FROM
table_1 t1
LEFT JOIN
table2 t2
ON t2.value= t1.value
Pouvez-vous essayer ci-dessous la requête SQL:
SELECT id,
CASE
WHEN t1.[value] = t2.[key] THEN t2.[value]
ELSE t1.[value]
END AS 'value'
FROM table_1 t1
LEFT OUTER JOIN [dbo].[table_2] t2
ON t1.[value] = t2.[key]
Vous avez différentes options.
La chose la plus importante ici est que ce que vous faites est un LEFT JOIN .
Un LEFT JOIN fonctionne en incluant les lignes du tableau de gauche même lorsque le les correspondants sont absents du tableau de droite. En d'autres termes, si vous sélectionniez toutes les lignes de l'ensemble de données que vous avez fourni en effectuant un LEFT JOIN en sélectionnant toutes les colonnes, vous obtiendriez:
SELECT
table_1.id AS id,
COALESCE(table_2.value, table_1.value) AS value
FROM
table_1
LEFT JOIN table_2 ON (table_1.value = table_2.key)
À ce stade, il suffit de peaufiner les colonnes que vous sélectionnez et, en particulier, comment les données sont extraites des colonnes clé et valeur. Ce que tu veux dire c'est
s'il y a quelque chose dans table_2.value, utilisez-le, sinon utilisez value_1.key .
Ceci peut être réalisé de différentes manières, certaines sont du SQL standard et d'autres dépendent de la plate-forme.
Étant donné la nature simple de la requête, j'utiliserais la fonction standard SQL COALESCE . Si toutefois la requête était plus compliquée, vous devrez peut-être recourir à un bloc CASE (également standard).
Voici la requête utilisant COALESCE .
|table_1 | table_2 | |id|value| key|value | | 1| val1|<null>|<null> | | 2| val2| val2|OtherValue| | 3| val3| val3|SomeValue | | 4| val4|<null>|<null> |
Quel type de base de données?
Si vos libellés sont corrects, je pense que vous voulez faire
join table2 t2 sur t2.key = t1.value