postgresql を使用しました。テーブルを作成し、SQLフィドルでデータベーススキーマにデータを挿入した後-
CREATE TABLE stock_table
(trade_type character varying, trade_date timestamp, trade_code_id bigint, trade_code character varying, qty_out double precision, qty_in double precision, price double precision, row_num bigint, stock_volume double precision)
;
COMMENT ON TABLE stock_table
IS '
trade_type:
SI: Initial quantity in stock
SS: Stock Sell
SB: Stock Buy
';
INSERT INTO stock_table
(trade_type, trade_date, trade_code_id, trade_code, qty_out, qty_in, price, row_num, stock_volume)
VALUES
('SB', '2016-11-30 13:35:12', 52, 'ACI', 0, 600, 1037.28, 1, 600),
('SI', '2016-11-30 13:37:12', 53, 'IFIC', 0, 300, 1357.38, 2, 300),
('SS', '2016-12-01 11:35:12', 53, 'IFIC', 100, 0, 1354.16, 3, 200),
('SS', '2016-12-01 13:36:37', 53, 'IFIC', 150, 0, 1355.25, 4, 50),
('SS', '2016-12-01 14:35:12', 52, 'ACI', 100, 0, 1035.26, 5, 500),
('SS', '2016-12-01 14:36:12', 52, 'ACI', 200, 0, 1035.04, 6, 300),
('SB', '2016-12-01 14:36:20', 53, 'IFIC', 0, 1040, 1356.44, 7, 1090),
('SB', '2016-12-01 16:35:12', 52, 'ACI', 0, 1560, 1045, 8, 1860),
('SS', '2016-12-02 13:35:12', 52, 'ACI', 120, 0, 1039.08, 9, 1740),
('SS', '2016-12-02 13:45:12', 53, 'IFIC', 100, 0, 1358.95, 10, 990),
('SB', '2016-12-02 13:55:12', 52, 'ACI', 0, 600, 1038.71, 11, 2340),
('SB', '2016-12-02 14:05:12', 53, 'IFIC', 0, 1040, 1363.3, 12, 2030),
('SS', '2016-12-03 13:35:12', 52, 'ACI', 100, 0, 1037.78, 13, 2240),
('SB', '2016-12-04 13:35:12', 53, 'IFIC', 0, 20, 1365.87, 14, 2050),
('SB', '2016-12-04 17:35:12', 52, 'ACI', 0, 50, 1054.19, 15, 2290)
;
特定の列の特定の行のデータを更新しようとしました。
update stock_table
set trade_type = 'SI'
where row_num = (SELECT row_num FROM stock_table
WHERE (trade_date between '2016-12-01' and '2016-12-03')
and trade_code='ACI'
and trade_type='SB'
LIMIT 1);
select * from stock_table;
それは機能し、更新されたデータベースで結果を示します。しかし、クエリを実行してテーブルを個別select * from stock_table
に表示すると、最初のデータベースが表示されますが、更新はありません。更新は、実行中update
とselect all
クエリを同時に実行している場合にのみ表示されます。それはなぜですか?これがSQLフィドルです