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;
Другие вопросы по тегам