SQL Gauche Joindre pour deux tables à l'aide d'une chaîne de concession comme argument

StackOverflow https://stackoverflow.com//questions/9682509

  •  13-12-2019
  •  | 
  •  

Question

J'ai besoin d'obtenir un titre à partir du tableau 2, Tableau 2 dispose de la colonne Titre et ID. Le tableau 1 dispose de certaines données et trois de ces colonnes ont concaténée ensemble l'ID qui peut être trouvé dans le tableau 1.

J'ai utilisé une fonction concat_ws () et j'ai donné à cette colonne un nom d'alias et devez utiliser l'alias pour l'argument sur l'argumentation (au moins c'est ce que j'ai compris que je devais faire)

Je pensais que cela pourrait être une simple jointure gauche, mais cela ne fonctionne pas pour moi.

Ceci est ma requête

SELECT
    table_openers.mail,
    table_openers.f_name,
    table_openers.l_name,
    table_openers.Quality,
    CONCAT_WS('-',
            table_openers.esp,
            table_openers.acc,
            table_openers.group) as 't1aid',
    table_groups.aid,
    table_groups.group_name
FROM
    lance_mailstats.table_openers
        LEFT JOIN
    lance_mailstats.table_groups ON table_groups.aid = t1aid;

Je reçois des résultats pour le courrier, f_name, l_name, qualité et T1AID, mais les colonnes AID et groupe_NAME de la deuxième table renvoient NULL.

Était-ce utile?

La solution

Je me sens comme si vous ne pouvez pas utiliser un alias dans la clause ON. Essayez de faire

LEFT JOIN
    lance_mailstats.table_groups ON table_groups.aid = CONCAT_WS('-',
            table_openers.esp,
            table_openers.acc,
            table_openers.group);

"Vous pouvez utiliser l'alias en groupe par, commander ou avoir des clauses pour faire référence à la colonne" (de dev.mysql.com/doc/refman/5.0/fr/problèmes-with-alias.html).

et "le conditionnel_expr utilisé avec On est toute expression conditionnelle de la forme pouvant être utilisée dans une clause où" (de dev.mysql.com/doc/refman/5.1/fr/join.html).

Ainsi, comme une inférence logique, vous n'êtes pas autorisé à utiliser des alias dans des clauses.

Autres conseils

Essayez d'utiliser une sous-requête .. ça va comme ça .........

ex.

Sélectionner tbl1.mail, tbl1.f_name, tbl1.l_name, tbl1.quality, tbl1.t1aid, table_groups.aid, table_groups.group_name

    FROM

       (SELECT
              table_openers.mail,
              table_openers.f_name,
              table_openers.l_name,
              table_openers.Quality,
                CONCAT_WS('-',
                   table_openers.esp,
                   table_openers.acc,
                   table_openers.group) as 't1aid',
             FROM
             lance_mailstats.table_openers )tbl1

       LEFT JOIN
       lance_mailstats.table_groups ON table_groups.aid = tbl1.t1aid;

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top