SQL Gauche Joindre pour deux tables à l'aide d'une chaîne de concession comme argument
-
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.
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;