【问题标题】:mysql Error Code: 1066. Not unique table/alias: 't2'mysql 错误代码:1066。不是唯一的表/别名:'t2'
【发布时间】:2018-07-29 13:07:53
【问题描述】:

我正在使用 mysql 工作台和 mysql 服务器来查询数据库。我有两张表t1t2,其中一列t1_namet2_name。 t2 有 300 万条记录,t1 有 100 万条记录。

我需要选择所有t2_names,其中t2_names 不等于t1_name 或不是t1_name 的子字符串。当我尝试以下查询时:

SELECT DISTINCT `t2_name`
FROM `t2`, `t1`
`t2`.`t2_name` NOT LIKE CONCAT('%',`t1`.`t1_name`,'%'));

我收到此错误:

mysql 错误代码:1066。不是唯一的表/别名:'t2'

您能解释并纠正我的问题吗?以前我做了this post 并尝试了这个查询:

SELECT DISTINCT `t2_name`
FROM `t2`
WHERE NOT EXISTS (SELECT * FROM `t1`
                    WHERE `t2_name` LIKE CONCAT('%',`t2_name`,'%'));

但它永远不会结束。

【问题讨论】:

    标签: mysql sql mysql-workbench


    【解决方案1】:

    首先限定所有列名。这仍然会导致错误吗?

    SELECT DISTINCT t2.t2_name
    FROM t2 JOIN
         t1
         ON t2.t2_name NOT LIKE CONCAT('%', t1.t1_name, '%');
    

    如果您的问题是性能,那么在没有 distinct 的情况下,not exists 会更好:

    SELECT t2_name
    FROM t2
    WHERE NOT EXISTS (SELECT 1
                      FROM t1
                      WHERE t2.t2_name LIKE CONCAT('%', t1.t1_name, '%')
                     );
    

    但是,这不会有太大的改进。不幸的是,使用此类通配符的like 查询效率非常低。通常,您可以构建数据模型,以便编写更高效的查询。

    【讨论】:

      【解决方案2】:

      您缺少WHERE 关键字。解析器认为t2 应该是t1 的别名,因为它跟在t1 之后。但是t2已经被之前的t2占用了。

      插入WHERE(并删除最后关闭的)):

      SELECT DISTINCT `t2_name`
      FROM `t2`, `t1`
      WHERE `t2`.`t2_name` NOT LIKE CONCAT('%',`t1`.`t1_name`,'%');
      

      旁注:恐怕您构建笛卡尔积的尝试不会比NOT EXISTS 更好。更有可能它的表现要差得多……

      【讨论】:

        【解决方案3】:

        我认为你打错了第二个 where 子句,它应该说

        SELECT DISTINCT `t2_name`
        FROM `t2`
        WHERE NOT EXISTS (SELECT * FROM `t1`
                            WHERE `t1_name` LIKE CONCAT('%',`t2_name`,'%'));
        

        目前,您正在有效地将 t2_name 与自身进行比较。

        无论如何,它会非常缓慢,因为 mysql 将对其进行表扫描。看看你的数据结构和内容,看看在你开始尝试使用它进行分析之前,你是否可以更好地进行一些数据清理/重组。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-03-08
          相关资源
          最近更新 更多