DELETE deletes rows that satisfy the WHERE clause from the specified table. If the WHERE clause does not exist, all rows in the table will be deleted. The result is a valid, but an empty table.
1 2 3 4 5 | [ WITH [ RECURSIVE ] with_query [, ...] ] DELETE FROM [ ONLY ] table_name [ * ] [ [ AS ] alias ] [ USING using_list ] [ WHERE condition | WHERE CURRENT OF cursor_name ] [ RETURNING { * | { output_expr [ [ AS ] output_name ] } [, ...] } ]; |
The WITH clause allows you to specify one or more subqueries that can be referenced by name in the primary query, equal to temporary table.
If RECURSIVE is specified, it allows a SELECT subquery to reference itself by name.
The with_query detailed format is as follows:
with_query_name [ ( column_name [, ...] ) ] AS
( {select | values | insert | update | delete} )
-- with_query_name specifies the name of the result set generated by a subquery. Such names can be used to access the result sets of
subqueries in a query.
column_name specifies the column name displayed in the subquery result set.
Each subquery can be a SELECT, VALUES, INSERT, UPDATE or DELETE statement.
If ONLY is specified, only that table is deleted. If ONLY is not specified, this table and all its sub-tables are deleted.
Specifies the name (optionally schema-qualified) of a target table.
Value range: an existing table name
Specifies the alias for the target table.
Value range: a string. It must comply with the naming convention.
Specifies the USING clause.
Specifies an expression that returns a value of type boolean. Only rows for which this expression returns true will be deleted.
Not supported currently. Only syntax interface is provided.
Specifies an expression to be computed and returned by the DELETE command after each row is deleted. The expression can use any column names of the table. Write * to return all columns.
Specifies a name to use for a returned column.
Value range: a string. It must comply with the naming convention.
Create the tpcds.customer_address_bak table.
1 | CREATE TABLE tpcds.customer_address_bak AS TABLE tpcds.customer_address; |
Delete employees whose ca_address_sk is less than 14888 in the tpcds.customer_address_bak table.
1 | DELETE FROM tpcds.customer_address_bak WHERE ca_address_sk < 14888; |
Delete the employees whose ca_address_sk is 14891, 14893, and 14895 from tpcds.customer_address_bak.
1 | DELETE FROM tpcds.customer_address_bak WHERE ca_address_sk in (14891,14893,14895); |
Delete all data in the tpcds.customer_address_bak table.
1 | DELETE FROM tpcds.customer_address_bak; |
Use a subquery (to delete the row-store table tpcds.warehouse_t30) to obtain a temporary table temp_t, and then query all data in the temporary table temp_t.
1 | WITH temp_t AS (DELETE FROM tpcds.warehouse_t30 RETURNING *) SELECT * FROM temp_t ORDER BY 1; |