-1
votes

La syntaxe de cette logique MySQL?

J'ai 5 tables jointes comme suit: xxx

Je veux ma clause où trouver les cas où tous les champs dans les 5 tables commencent par " 55 'mais certains font.

Voici un exemple de jouet. Je suis désolé qu'il soit très difficile de poster les tables et les données exactes en raison de la complexité. Cet échantillon transmet la signification et le boîtier:

T1: xxx

t2: xxx

T3: xxx

t5: xxx

t5: xxx

Dans ces 5 tableaux, il y a deux lignes dans chaque table qui partage le même code parmi les 5 tables. Je suis intéressé à trouver les lignes qui ont la version Démarre avec 55 dans certaines tables (c'est-à-dire satisfaites ou relevé), mais pas toutes les tables (c'est-à-dire satisfaites de non et) . Dans mon exemple de jouet, cette condition est satisfaite par des lignes avec nom : (aa, jj, gg, jj, mm) (qui ont tous le code 11 ). Mais les autres rangées ne devraient pas sortir de la requête. Pourquoi? Parce que l'une de leur version commence par 55 , ( nom : bb , ee , HH , kk , mm ), ou parce que tous ont version commence par 55 ( nom : cc , ff , ii , ll , oo ).


2 commentaires

Duplicaillard possible de Query 5 tables à vérifier quand elles Différent dans un champ


Pouvez-vous indiquer quelques échantillons de données avec des résultats attendus? Je trouve votre critère un peu difficile à comprendre.


3 Réponses :


0
votes

Vous pouvez ajouter:

where (t1.version like '55%' or
       t2.version like '55%' or
       t3.version like '55%' or
       t4.version like '55%' or
       t5.version like '55%' 
      ) and
      (least(t1.version, t2.version, t3.version, t4.version, t5.version) not like '55%' or
       greatest(t1.version, t2.version, t3.version, t4.version, t5.version) not like '55%'
      )


1 commentaires

Ce sera vrai aussi si toutes les 5 versions commencent par 55 mais op veulent certains et pas tous en même temps



0
votes
where (t1.version like '55%' or -- at least one version starts with 55
      t2.version like '55%' or
      t3.version like '55%' or
      t4.version like '55%' or
      t5.version like '55%')
and not (t1.version like '55%' and -- all versions start with 55, so we negate with NOT
      t2.version like '55%' and
      t3.version like '55%' and
      t4.version like '55%' and
      t5.version like '55%')
The first clause means that at least one of the version fields starts with 55.The second clause (which is negated with NOT) would only be true if the all started with 55.

0 commentaires

0
votes

Si votre table n'est pas trop grosse, vous pouvez également essayer quelque chose comme ceci:

WHERE
    CONCAT_WS(LEFT(t1.version, 2),
            LEFT(t2.version, 2),
            LEFT(t3.version, 2),
            LEFT(t4.version, 2),
            LEFT(t5.version, 2)) IN ('55' , '5555', '555555', '55555555');


0 commentaires