首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更新Firebird中选定的行

更新Firebird中选定的行
EN

Stack Overflow用户
提问于 2018-07-13 06:31:59
回答 1查看 1.7K关注 0票数 1

我想修改我的查询。现在它看起来像这样

代码语言:javascript
复制
SELECT EW_POLYLINE.P0_X, EW_POLYLINE.P0_Y, EW_POLYLINE.ID, EW_POLYLINE.STAN_ZMIANY, a.IDE, EW_POLYLINE.ID_WARSTWY
FROM EW_POLYLINE 
LEFT JOIN (
    SELECT EW_OBIEKTY.STATUS
        , EW_OB_ELEMENTY.IDE
        , EW_OB_ELEMENTY.TYP
    FROM EW_OBIEKTY 
    INNER JOIN EW_OB_ELEMENTY 
        ON EW_OBIEKTY.UID = EW_OB_ELEMENTY.UIDO
    WHERE EW_OBIEKTY.STATUS = 0 AND EW_OB_ELEMENTY.TYP <> 1
) as a ON EW_POLYLINE.ID = a.IDE
WHERE EW_POLYLINE.STAN_ZMIANY = 0 AND a.IDE Is Null

现在它像数据库的1/3一样返回,我想将这些行的"stan_zmiany“修改为3。

代码语言:javascript
复制
update EW_POLYLINE
set stan_zmiany = 3
WHERE EXISTS (SELECT 1
FROM EW_POLYLINE 
LEFT JOIN (
    SELECT EW_OBIEKTY.STATUS
        , EW_OB_ELEMENTY.IDE
        , EW_OB_ELEMENTY.TYP
    FROM EW_OBIEKTY 
    INNER JOIN EW_OB_ELEMENTY 
        ON EW_OBIEKTY.UID = EW_OB_ELEMENTY.UIDO
    WHERE EW_OBIEKTY.STATUS = 0 AND EW_OB_ELEMENTY.TYP <> 1
) as a ON EW_POLYLINE.ID = a.IDE
where EW_POLYLINE.STAN_ZMIANY = 0 AND a.IDE Is Null)

但是它更改了所有行的"stan_zmiany“,而不是第一个查询中选择的行,您知道如何修复这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-13 11:19:46

存在中的子查询是不相关的子查询,这意味着它不依赖于update记录中的值。

相反,使用

代码语言:javascript
复制
update EW_POLYLINE
set stan_zmiany = 3
where EW_POLYLINE.STAN_ZMIANY = 0
and NOT EXISTS (
    SELECT 1
    FROM EW_OBIEKTY 
    INNER JOIN EW_OB_ELEMENTY 
        ON EW_OBIEKTY.UID = EW_OB_ELEMENTY.UIDO
    WHERE EW_OBIEKTY.STATUS = 0 AND EW_OB_ELEMENTY.TYP <> 1
    AND EW_OB_ELEMENTY.IDE = EW_POLYLINE.ID
)

注意使用not exists而不是exists,因为您实际上想要更新来自EW_POLYLINE的记录,这些记录用于而不是,以满足这一要求。

这样,在子查询中不需要左联接,条件EW_POLYLINE.ID = EW_OB_ELEMENTY.IDE使子查询与外部update语句相关联。

还请注意,这与我在my answer to your previous question中提供的最后一个解决方案中的select语句具有类似的形式。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51318913

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档