sql left join для двух таблиц с использованием строки CONCAT в качестве аргумента
Мне нужно получить заголовок из таблицы 2, таблица 2 имеет столбец заголовок и идентификатор. Таблица 1 содержит некоторые данные, и три из этих столбцов, соединенных вместе, составляют идентификатор, который можно найти в таблице 1.
Я использовал функцию CONCAT_WS() и дал этому столбцу псевдоним, и мне нужно использовать псевдоним для аргумента on (по крайней мере, это то, что, как я понял, мне нужно было сделать)
Я думал, что это может быть простое соединение слева, но оно не работает для меня.
Это мой запрос
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;
Я получаю результаты для mail, f_name, l_name, Quality и t1aid, но столбцы aid и group_name второй таблицы возвращают ноль.
2 ответа
Я чувствую, что вы не можете использовать псевдоним в предложении ON. Попробуй сделать
LEFT JOIN
lance_mailstats.table_groups ON table_groups.aid = CONCAT_WS('-',
table_openers.esp,
table_openers.acc,
table_openers.group);
"Вы можете использовать псевдоним в предложениях GROUP BY, ORDER BY или HAVING для ссылки на столбец" (из dev.mysql.com/doc/refman/5.0/en/problems-with-alias.html).
И "conditional_expr, используемый с ON, - это любое условное выражение формы, которое можно использовать в предложении WHERE" (из dev.mysql.com/doc/refman/5.1/en/join.html).
Таким образом, в качестве логического вывода вы не можете использовать псевдонимы в предложениях ON.
Попробуйте использовать подзапрос.. это идет так.........
ех.
ВЫБЕРИТЕ 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;