sql left join для двух таблиц с использованием строки CONCAT в качестве аргумента - PullRequest
1 голос
/ 13 марта 2012

Мне нужно получить заголовок из таблицы 2, в таблице 2 есть столбец title и id. Таблица 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 ]

1 голос
/ 13 марта 2012

Я чувствую, что вы не можете использовать псевдоним в предложении 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-с-alias.html).

И «Условный_экспресс, используемый с ON, - это любое условное выражение формы, которое можно использовать в предложении WHERE» (из dev.mysql.com/doc/refman/5.1/en/join.html).

Так что в качестве логического вывода вы не можете использовать псевдонимы в предложениях ON.

0 голосов
/ 13 марта 2012

попробуйте использовать подзапрос .. он выглядит следующим образом .........

ex.

SELECT 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;
...