为了账号安全,请及时绑定邮箱和手机立即绑定

多表删除,一直报错,字段不存在

DELETE  t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name)>=2 )AS t2 ON t1.goods_name=t2.goods_name WHERE t1.goods_id=t2.goods_id;


报错信息:UNKNOW COLUMNS  in field list

t1和t2表中应该都有该字段啊,


正在回答

5 回答

t1FROM 中间少了一个空格,这里不能修改答案....

0 回复 有任何疑惑可以回复我~
SET sql_mode = '';

DELETE t1FROM tdb_goods AS t1
    LEFT JOIN (
        SELECT goods_id, goods_name
	FROM tdb_goods
	GROUP BY goods_name
	HAVING COUNT(goods_name) > 1
	) AS t2
    ON t1.goods_name = t2.goods_name
WHERE t1.goods_id > t2.goods_id;

试试这个?

0 回复 有任何疑惑可以回复我~

DELETE  t1 FROM tdb_goods AS t1 LEFT JOIN (SELECT min(goods_id) AS goods_id,goods_name FROM tdb_goods GROUP BY goods_name HAVING count(goods_name)>=2 ) AS t2 ON t1.goods_name=t2.goods_name WHERE t1.goods_id > t2.goods_id;

你的t2表有问题,MySQL 5.7.5后only_full_group_by成为sql_mode的默认选项之一,这可能导致一些sql语句失效,因为执行group by语句实际上把两行纪录或两行以上记录合并成一行,搜索引擎不知道该返回哪一条(因为这几行记录只有goods_name相同,而其他字段是不相同的,所以你要明确指定返回哪一行,我这里就写的min(goods_id),表示返回goods_id最小的那一行),他教学应该用的是MySQL 5.7.5以前的版本,所以没这个问题

2 回复 有任何疑惑可以回复我~

>delete t1 from tdb_goods as t1 left join
    -> (select goods_id,goods_name from tdb_goods group by goods_name having count(goods_name) >= 2) as t2
    -> on t1.goods_name = t2.goods_name where t1.goods_id > t2.goods_id;

最后的where条件写错了,是">"大于不是"="等于

1 回复 有任何疑惑可以回复我~

下面AS与“)”留个空格呢?     ) AS

===============================

HAVING count(goods_name)>=2 )AS t2 


然后下面条件“=”改成“>”

==============================

WHERE t1.goods_id=t2.goods_id;

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396884    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

多表删除,一直报错,字段不存在

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信