1

我需要从表 2 中获取标题,表 2 有标题和 id 列。表 1 包含一些数据,其中三个连接在一起的列构成了表 1 中可以找到的 id。

我使用了 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 列返回 null。

4

2 回答 2

1

我觉得你不能在 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)。

并且“与 ON 一起使用的 conditional_expr 是可以在 WHERE 子句中使用的任何形式的条件表达式”(来自 dev.mysql.com/doc/refman/5.1/en/join.html)。

因此,作为逻辑推理,您不允许在 ON 子句中使用别名。

于 2012-03-13T11:13:47.433 回答
0

尝试使用子查询..它是这样的............

前任。

选择 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;
于 2012-03-13T12:01:03.603 回答