Hologres 这个语法在mysql会报错。但是pg这个就直接过了。 这算不算bug?-[阿里云_云淘科技]

Hologres delete from public.cnpldw_dct_waybill_trace_f_1
where exists (select 1 from public.cnpldw_dct_waybill_trace_f_1_tmp b where bill_id=b.bill_id and status=b.status); 我执行的是这个语句,结果把主表全清了。tmp表里面就6万,主表2个亿,我看了逻辑是没问题的。唯一的问题是exists里面没有给主表加个别名。导致主表全清了。这个语法在mysql会报错。但是pg这个就直接过了。 这算不算bug?

以下为热心网友提供的参考意见

这个语法在MySQL中会报错,因为MySQL不支持在EXISTS子句中使用表的别名。但是,在PostgreSQL中,这个语法是允许的,所以您在Hologres上执行这个语句时没有遇到问题。

如果您希望在MySQL中实现类似的功能,可以使用以下方法:

  1. 使用临时表存储主表和tmp表的数据。
  2. 在临时表中删除与tmp表中相同的数据。
  3. 将临时表中的数据插入回主表。
  4. 删除临时表。

以下是相应的MySQL代码示例:

-- 创建临时表并插入数据
CREATE TEMPORARY TABLE temp_table AS
SELECT * FROM public.cnpldw_dct_waybill_trace_f_1;

-- 删除与tmp表中相同的数据
DELETE t
FROM temp_table t
JOIN public.cnpldw_dct_waybill_trace_f_1_tmp b ON t.bill_id = b.bill_id AND t.status = b.status;

-- 将临时表中的数据插入回主表
INSERT INTO public.cnpldw_dct_waybill_trace_f_1
SELECT * FROM temp_table;

-- 删除临时表
DROP TEMPORARY TABLE temp_table;

以下为热心网友提供的参考意见

这个sql不写别名也是正常的语法,不会报错。问题应该是你join了多少主表的数据然后就被删除了。 ,此回答整理自钉群“实时数仓Hologres交流群”

本文来自投稿,不代表新手站长_郑州云淘科技有限公司立场,如若转载,请注明出处:https://www.cnzhanzhang.com/11501.html

(0)
匿名
上一篇 2023年12月18日 上午8:06
下一篇 2023年12月18日

相关推荐

新手站长从“心”出发,感谢16年您始终不离不弃。