recherche

Maison  >  Questions et réponses  >  le corps du texte

mysql - SQL identifie différentes données dans deux tables

Il existe deux tables avec environ 10 000 lignes. Nous devons interroger les lignes avec des différences. Le code actuel est le suivant :

SELECT number, version
FROM
 (
   SELECT a.number, b.version
   FROM a
   UNION ALL
   SELECT b.number, b.version
   FROM b
)  tb
GROUP BY number, version
HAVING COUNT(*) = 1
ORDER BY number

Mais voici le problème. Le code ci-dessus ne peut interroger que différentes lignes, mais il ne peut pas afficher celles du tableau a qui ne sont pas dans le tableau b, ni celles du tableau b qui ne sont pas dans le tableau a. afficher les lignes de la troisième colonne ?

曾经蜡笔没有小新曾经蜡笔没有小新2745 Il y a quelques jours703

répondre à tous(2)je répondrai

  • 巴扎黑

    巴扎黑2017-05-18 10:51:15

    Selon l'affiche originale, le numéro et la version dans une seule table ne seront pas répétés. Créez un index composite pour le numéro et la version des deux tables, puis exécutez le sql

    suivant.
    SELECT a.number, a.version,'from_a'
    FROM a
    where not exists (
    SELECT 1 FROM b where a.number=b.number and a.version=b.version)
    union all
    SELECT b.number, b.version,'from_b'
    FROM b
    where not exists (
    SELECT 1 FROM a where a.number=b.number and a.version=b.version)
    ORDER BY number;
    或者
    SELECT a.number, a.version,'from_a'
    from a left join b on a.number=b.number and a.version=b.version
    where b.id is null
    union all
    SELECT b.number, b.version,'from_b'
    from a right join b on a.number=b.number and a.version=b.version
    where a.id is null
    ORDER BY number;
    下面这个效率可能会差点

    répondre
    0
  • PHP中文网

    PHP中文网2017-05-18 10:51:15

    Essayez-lefull join ... where a is null or b is null. Par exemple, en utilisant Postgres :

    select
      case when a.n is null then b.n else a.n end as n,
      case when a.n is null then b.v else a.v end as v,
      case when a.n is null then 'b' else 'a' end as src
    from
      (values(1, 2), (2, 3), (3, 4)) as a(n, v)
      full join
      (values(6, 7), (2, 3), (3, 9)) as b(n, v)
      using (n, v)
    where a.n is null or b.n is null

    Résultat :

     n | v | src
    ---+---+-----
     1 | 2 | a
     3 | 4 | a
     3 | 9 | b
     6 | 7 | b
    (4 行记录)
    

    répondre
    0
  • Annulerrépondre