Mysql
MySQL 中這個 Postgres 查詢的正確語法是什麼?
我有一個在我們的 PostgreSQL 數據庫中執行良好的查詢,但我們現在還需要在 MySQL 數據庫上執行我們的應用程序。
該查詢採用一個 ID 和位置數組,並使用給定 ID 更新每個記錄,並為相應位置更新一個新值。
UPDATE items SET position = i_vals.position FROM (VALUES (1,12), (2, 13), (3,11)) AS i_vals(id, position) WHERE i_vals.id = items.id;
如何將此查詢重寫為對 MySQL 和 SQLite3 友好?作為獎勵,我希望能夠使用相同的查詢在 PostgreSQL 中執行,但很感激這可能是不可能的
有可能
UPDATE items, ( SELECT 1 id, 12 position UNION ALL SELECT 2 , 13 UNION ALL SELECT 3 , 11 ) i_vals SET items.position = i_vals.position WHERE i_vals.id = items.id;
或者:
UPDATE items JOIN ( SELECT 1 id, 12 position UNION ALL SELECT 2 , 13 UNION ALL SELECT 3 , 11 ) i_vals ON i_vals.id = items.id; SET items.position = i_vals.position ;
在 SQL 標準中,沒有辦法在更新語句中連接兩個表。
重寫您的陳述的通用方法是:
UPDATE items SET position = case id when 1 then 12 when 2 then 13 when 3 then 11 end where id in (1,2,3);
然而,這對修改不太靈活,但應該在任何 DBMS 上執行。