为什么无法通过in子查询删除ReplicatedMergeTree引擎的数据
发布于 10 个月前 作者 yankannan 890 次浏览 来自 问答

ReplicatedMergeTree引擎表数据可以通过 alter talbe tablename delete where id in (1,2) 方式删除,但是in后面使用子查询方式无法删除数据,如 alter talbe tablename delete where id in (select id from to_delete_ids); 请问各位大神,有什么解决方案??

3 回复

我本机测试是ok的,是目前最新版18.6.0

JD :) select * from test;

SELECT * FROM test

┌─ORDER_ID─┬─ORDER_NAME─┬─notNullDate─┬─version─┐ │ 111111 │ 汽车 │ 2018-06-06 │ 5 │ └──────────┴────────────┴─────────────┴─────────┘

1 rows in set. Elapsed: 0.002 sec.

JD :) select * from test2;

SELECT * FROM test2

┌─ORDER_ID─┬─ORDER_NAME─┬─notNullDate─┐ │ 111111 │ 汽车 │ 2018-06-06 │ └──────────┴────────────┴─────────────┘ ┌─ORDER_ID─┬─ORDER_NAME─┬─notNullDate─┐ │ 222222 │ 房子 │ 2018-08-07 │ └──────────┴────────────┴─────────────┘

2 rows in set. Elapsed: 0.002 sec.

JD :) alter table test2 delete where ORDER_ID in (select ORDER_ID from test);

ALTER TABLE test2 DELETE WHERE ORDER_ID IN ( SELECT ORDER_ID FROM test )

Ok.

0 rows in set. Elapsed: 0.002 sec.

JD :) select * from test2;

SELECT * FROM test2

┌─ORDER_ID─┬─ORDER_NAME─┬─notNullDate─┐ │ 222222 │ 房子 │ 2018-08-07 │ └──────────┴────────────┴─────────────┘

1 rows in set. Elapsed: 0.002 sec.

你好,非常感谢,问题已经解决! 差不多一个月前18.6.0刚刚出来我就做了升级,之前是只有ReplicatedMergeTree引擎支持删除的,不支持in子查询删除。升级后就可以了,且其他引擎也都支持删除了。

18.14.15 在执行in 查询时默认设置会提示报错,需要在语句中加入GLOBAL 例如: SELECT sum(LO_REVENUE) FROM lineorderd WHERE LO_CUSTKEY GLOBAL IN ( SELECT C_CUSTKEY AS LO_CUSTKEY FROM customerd WHERE C_REGION = ‘ASIA’ );

回到顶部