SQL ha lasciato unissione per due tabelle usando una stringa concat come argomento
-
13-12-2019 - |
Domanda
Ho bisogno di ottenere un titolo dalla tabella 2, Tabella 2 ha il titolo e la colonna ID. La Tabella 1 ha alcuni dati e tre di queste colonne concatenate insieme Trucco L'ID che può essere trovato nella Tabella 1.
Ho usato la funzione Concat_ws () e ha dato questa colonna un nome di alias e ha bisogno di utilizzare l'alias per l'argomento On (almeno questo è ciò che ho capito che avevo bisogno di fare)
Pensavo che questo potrebbe essere un semplice resto a sinistra, ma non funziona per me.
Questa è la mia query
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;
.
ottengo risultati per posta, f_name, l_name, qualità e t1aid, ma le colonne di aiuto e group_name della seconda tabella restituiscono NULL.
Soluzione
Mi sento come se non puoi usare un alias nella clausola sulla clausola. Prova a fare
LEFT JOIN
lance_mailstats.table_groups ON table_groups.aid = CONCAT_WS('-',
table_openers.esp,
table_openers.acc,
table_openers.group);
.
"È possibile utilizzare l'alias in gruppo da, ordinare, o avere clausole per fare riferimento alla colonna" (da dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html).
E "Conditional_Expr utilizzato con ON è qualsiasi espressione condizionale del modulo che può essere utilizzata in una clausola dove" (da dev.mysql.com/doc/refman/5.1/en/join.html).
Così come un'inferenza logica non ti è permesso usare alias in clausole.
Altri suggerimenti
prova a usare una sottoquery .. Va come questo .........
ex.
Seleziona 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;
.