更新声明-不满足条件的地方

时间:2019-12-29 13:57:15

标签: sql postgresql sql-update

我正在运行以下sql语句,但似乎每一行都在更新并且条件被忽略。我要更新的行的条件是:

  • instrument_static.client_sentiment_long> 50
  • market_data.days_change => 0

查询:

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
                 );

2 个答案:

答案 0 :(得分:1)

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

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 any 行的存在-这不是您想要的。

我会将最终条件移到外部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                          
                 );

答案 1 :(得分:0)

您可以在join语句中使用类似UPDATE的Postgresql:

UPDATE market_data m
SET sentiment_inline = 'TRUE'
FROM instrument_static s
WHERE m.epic = 'MARKET:' || s.epic JOIN AND s.client_sentiment_long > 50 AND m.days_change >= 0