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

标签 mysql sql mysql-workbench

我正在使用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 Error Code: 1066. Not unique table/alias: 't2'

您能解释一下并纠正我的疑问吗?之前我做过this post并尝试了这个查询:

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

但这需要永远并且永无止境。

最佳答案

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

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

如果您的问题是性能,那么如果没有 distinct不存在 会更好:

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

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

关于mysql 错误代码 : 1066. 不唯一的表/别名: 't2',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51580626/

相关文章:

mysql - 使用group_concat获取多行的mysql结果

sql - Greenplum中的分区消除

mysql-workbench - 在 MySQL Workbench 的数据建模工具中对齐 EER 图中的两个表?

python - Django/mysql中间表不插入数据

php - 没有消息的 MySQL 连接错误

mysql - CloudFoundry MySQL Java 配置

php - SQL 查询后的别名列

sql - 不用聚合函数求最大值

exception - org.apache.tomcat.dbcp.dbcp.SQLNestedException : Cannot get a connection, 池错误等待空闲对象超时