mysql错误代码:1066。非唯一表/别名:';t2和x27;

mysql错误代码:1066。非唯一表/别名:';t2和x27;,mysql,sql,mysql-workbench,Mysql,Sql,Mysql Workbench,我使用mysql工作台和mysql服务器来查询数据库。我有两个表t1和t2,其中一列是t1\u name和t2\u name。t2有300万条记录,t1有100万条记录 我需要选择所有t2\u名称,其中t2\u名称不等于t1\u名称或不等于t1\u名称的子字符串。当我尝试以下查询时: SELECT DISTINCT `t2_name` FROM `t2`, `t1` `t2`.`t2_name` NOT LIKE CONCAT('%',`t1`.`t1_name`,'%')); 我得到这个错误

我使用mysql工作台和mysql服务器来查询数据库。我有两个表
t1
t2
,其中一列是
t1\u name
t2\u name
。t2有300万条记录,t1有100万条记录

我需要选择所有
t2\u名称
,其中
t2\u名称
不等于
t1\u名称
或不等于
t1\u名称
的子字符串。当我尝试以下查询时:

SELECT DISTINCT `t2_name`
FROM `t2`, `t1`
`t2`.`t2_name` NOT LIKE CONCAT('%',`t1`.`t1_name`,'%'));
我得到这个错误:

mysql错误代码:1066。非唯一表/别名:“t2”

你能解释并纠正我的疑问吗?在此之前,我提出并尝试了以下查询:

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, '%');
如果您的问题是性能,
不存在
如果没有
独特的

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

然而,这不会有多大的改善。不幸的是,使用此类通配符的
like
查询效率极低。通常,您可以构造数据模型,以便编写更高效的查询。

您缺少
WHERE
关键字。解析器认为
t2
应该是
t1
的别名,如下所示。但是
t2
已经被前面的
t2
占用

在处插入
(并删除最后一次关闭的


旁注:我担心您构建笛卡尔积的尝试不会比
不存在
更好。更有可能的是,它的性能会差得多……

我认为您输入的第二个where子句错误,应该是

SELECT DISTINCT `t2_name`
FROM `t2`
WHERE NOT EXISTS (SELECT * FROM `t1`
                    WHERE `t1_name` LIKE CONCAT('%',`t2_name`,'%'));
目前,您正在有效地将t2_名称与自身进行比较

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

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