首页 > 解决方案 > 更新语句 - 不满足条件的地方

问题描述

我正在运行下面的 sql 语句,但看起来好像每一行都在更新并且条件被忽略了。我要更新一行的条件是:

查询:

UPDATE market_data
    SET sentiment_inline = 'TRUE'
    WHERE EXISTS (SELECT s.epic,s.client_sentiment_long,s.client_sentiment_short,m.days_change,m.sentiment_inline
                  FROM instrument_static s JOIN 
                       market_data m
                       ON m.epic = 'MARKET:' || s.epic 
                  WHERE s.client_sentiment_long > 50 AND m.days_change >=0
                 );

标签: sqlpostgresqlsql-update

解决方案


我很确定你想要一个相关的子查询:

UPDATE market_data m
    SET sentiment_inline = 'TRUE'
    WHERE EXISTS (SELECT 1
                  FROM instrument_static s 
                  WHERE m.epic = 'MARKET:' || s.epic AND
                        s.client_sentiment_long > 50 AND 
                        m.days_change >= 0
                 );

这会将子查询中的条件与您可能要更新的特定行联系起来。否则,条件是检查是否存在任何market_data——这不是你想要的。

我会将最终条件移至外部WHERE,因此内容如下:

    WHERE m.days_change >= 0 AND
          EXISTS (SELECT 1
                  FROM instrument_static s 
                  WHERE m.epic = 'MARKET:' || s.epic AND
                        s.client_sentiment_long > 50                          
                 );

推荐阅读