我正在运行以下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
);
答案 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