mysql错误代码:1066。非唯一表/别名:';t2和x27;
我使用mysql工作台和mysql服务器来查询数据库。我有两个表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`,'%')); 我得到这个错误
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`,'%'));