1
votes

SQL Comment mapper la valeur si elle existe?

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|

sql

2 commentaires

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


5 Réponses :


2
votes

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


2 commentaires

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.



0
votes

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


0 commentaires

0
votes
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

0 commentaires

0
votes

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] 


0 commentaires

2
votes

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>    |


0 commentaires