我正在使用mysql工作台和mysql服务器来查询数据库。我有两个表 t1
和 t2
,其中有一列 t1_name
和 t2_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/