7
votes

Limite, Choix de l'Union Dupliquer des colonnes de vérification

J'ai deux tables comme les suivantes:

paramètres1 strong> p> xxx pré>

paramètre2 strong> p> XXX PRE>

Je rejoint habituellement la série de résultats de ces deux tables avec un syndicat de cette manière: p> xxx pré>

et je reçois ce jeu de résultats: xxx pré>

Je veux limiter la vérification duplication syndicale uniquement à la colonne code> COD COD>, donc je veux éviter que la cod est dupliquée dans Le jeu de résultats (lorsqu'il y a un enregistrement avec un nom différent et la même morue), je souhaite obtenir le nom de la première table ( paramètres1 strud>) em>: p>

+------+-----+
| cod  | des |
+------+-----+
|  1   | mmm |   ---> FROM parameters2
|  2   | bbb |
|  3   | ccc |


3 commentaires

Dupliqué possible de SQL Server Union distincte pour une colonne


Veuillez expliquer la logique de la raison pour laquelle la ligne (1, 'aaa') est choisi sur la ligne (1, 'mmm') par exemple. parce que 'aaa' <'mmm' peut-être? La réponse acceptée semble choisir une rangée arbitraire.


C'est logique que j'ai défini parce qu'une table a la priorité ...


3 Réponses :


2
votes

la solution dans Ce lien doit être adaptable à ces environnements , comme il est standard SQL (vous pouvez utiliser isnull code> si coalesce code> n'est pas disponible). Je ne suis pas sûr de savoir quelle est la disponibilité de Inscription extérieure complète code> est, mais elle doit également être disponible sur les trois plateformes également.

Dans votre cas, la solution finira par ressembler à: P>

SELECT  p1.cod,  ISNULL(p1.des, p2.des) AS des
FROM parameters1 p1
    LEFT JOIN parameters2 p2 ON p1.cod = p2.cod
UNION ALL
SELECT  p2.cod, p2.des
FROM parameters2 p2
    LEFT JOIN parameters1 p1 ON p1.cod = p2.cod
WHERE p1.cod IS NULL


3 commentaires

La solution ne couvre pas les cas où un paramètre ne vit que dans la deuxième table, c'est-à-dire que le résultat sera toujours identique à un simple choix de la première table.


Cela ne fonctionne pas car si je supprimais le record des paramètres 1, je ne reçois rien ... Voir la question mise à jour, et désolé de ne pas être très précise dans la question.


Tirer. Avez-vous les deux laissés et rejoindre support dans mysql?



0
votes

Modifier la deuxième requête de l'Union pour obtenir uniquement des paramètres2 où les paramètres2.ID ne sont pas dans Paramètres1.


0 commentaires

10
votes
SELECT  cod, des 
FROM parameters1 p1
UNION ALL
SELECT  cod, des 
FROM parameters2 p2
WHERE NOT EXISTS (
    SELECT 1
    FROM parameters1 p1sub
    WHERE p1sub.cod = p2.cod
)

2 commentaires

Solution fantastique, merci!


@YPERCUBE Très bon point, pas besoin d'essayer de filtrer les doublons ici ... Mise à jour.