sql - 用 EXISTS 替换 IN 子句会导致意外结果
问题描述
给定一个简单的表 lieu_horaire:
+ id_horaire (numeric)
+ id_lieu (numeric)
+ horaire (timestamp)
以下查询目前工作正常:
DELETE FROM lieu_horaire where id_horaire IN (
SELECT id_horaire "+
FROM (
SELECT id_horaire,
ROW_NUMBER() OVER (PARTITION BY id_lieu order by horaire desc) AS line_number
FROM lieu_horaire
) as sr
WHERE sr.line_number > 10);
但由于可扩展性的原因,我想用 . 替换 IN 子句EXISTS '... WHERE EXISTS(... '
。但是对于存在,而不是删除正确的行,它会删除所有行,就好像'... WHERE sr.line_number...'
表达式不存在一样。
解决方案
确保您在使用 exists 时加入了该列,如下所示:
DELETE FROM lieu_horaire where exists (
SELECT id_horaire
FROM (
SELECT id_horaire,
ROW_NUMBER() OVER (PARTITION BY id_lieu order by horaire desc) AS line_number
FROM lieu_horaire
) as sr
WHERE sr.line_number > 10 **and lieu_horaire.id_horaire=sr.id_horaire**);
推荐阅读
- anaconda - 启动终端时的clang后端
- python - 我想在熊猫中将两个具有相同名称列的数据框组合起来
- android - RenderScript 和 PlayStore 64 位要求
- python - 以浮点数形式保存到新列中的 2 个日期之间的差异
- keras - 是否可以在 keras 层中获得批量大小
- c - OpenGL 应用程序中的 GL_Invalid_Operation
- java - 改进 if-else 语句的圈复杂度代码
- javascript - 如何使用 javascript 交换 eCharts 条形图上的轴
- angular - 如何在我的 Angular 项目中保存 ckeditor 脚本而不是动态调用它?
- ios - 在swift中添加Nsattributed字符串和字符串