sql left join de duas tabelas utilizando uma CONCAT string como argumento
-
13-12-2019 - |
Pergunta
Eu precisa para obter um título da tabela 2, tabela 2 tem título e a coluna id.A tabela 1 tem alguns dados e estes três colunas concatenadas maquiagem a identificação do que pode ser encontrado na tabela 1.
Eu usei CONCAT_WS() função e deu esta coluna de um nome de alias e precisa usar o Alias para o argumento(Pelo menos é o que eu entendi que eu precisava fazer)
Eu pensei que esta poderia ser uma simples associação esquerda, mas ainda não está funcionando para mim.
Esta é a minha consulta
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;
Eu chegar em resultados para o correio, f_name, l_name, Qualidade e t1aid, mas o auxílio e group_name colunas da segunda tabela retornar null.
Solução
Eu sinto que você não pode usar um alias na cláusula ON.Tente fazer
LEFT JOIN
lance_mailstats.table_groups ON table_groups.aid = CONCAT_WS('-',
table_openers.esp,
table_openers.acc,
table_openers.group);
"Você pode usar o alias no GROUP BY, ORDER BY ou HAVING cláusulas para referir-se a coluna" (a partir de dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html).
E "O conditional_expr usado com qualquer expressão condicional do formulário que pode ser usado em uma cláusula WHERE" (a partir de dev.mysql.com/doc/refman/5.1/en/join.html).
Assim como uma inferência lógica, você não está permitido o uso de aliases na cláusulas.
Outras dicas
tente usar uma subconsulta..ele vai como esta.........
ex.
SELECIONE tbl1.mail, tbl1.f_name, tbl1.l_name,tbl1.Qualidade, tbl1.t1aid,table_groups.ajuda, 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;