如果另一個表不存在某個條件,我已經看到了洗掉行的各種示例。
如果另一個表中已存在該行,我想從該表中洗掉該行。我想出了這個查詢,但它似乎很簡單,我擔心我遺漏了一些東西。
DELETE FROM tmp t
WHERE (t.employee = (SELECT p.employee FROM position p
WHERE (t.column1 = p.column1 AND
t.column2 = p.column2)
)
);
uj5u.com熱心網友回復:
這應該使用EXISTS. 首先,您不會冒子查詢回傳多行的危險。然后,您可以獲得更好的執行計劃。
DELETE FROM tmp
WHERE EXISTS (SELECT FROM position
WHERE (tmp.column1, tmp.column2, tmp.employee) IS NOT DISTINCT FROM
(position.column1, position.column2, position.employee)
);
uj5u.com熱心網友回復:
根據Postgres 檔案,您可以使用更好的結構來洗掉專案
DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ]
[ USING from_item [, ...] ]
[ WHERE condition | WHERE CURRENT OF cursor_name ]
[ RETURNING * | output_expression [ [ AS ] output_name ] [, ...] ]
您可以使用USING鍵盤連接兩個表。
演示
delete from tmp t
using position p
where
t.column1 = p.column1
and t.column2 = p.column2
and t.employee = p.employee;
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/363758.html
標籤:sql PostgreSQL的
