# Delete Matching Rows

> Delete rows matching a query and return how many were deleted.

- ID: `db_delete_matching_rows`
- Type: Block
- Category: [Databases](https://inventor.bot/docs/reference/blocks/databases.md)

**Inputs**

| Name | Required | Description | Value |
| --- | --- | --- | --- |
| `database_id` | yes | Select the database to delete rows from. |  |
| `limit` |  | Maximum number of rows to delete (default: 100, max: 1000). | e.g. `"100"` |
| `query_json` | yes | Define filters to find the rows to delete. | JSON text, format below |

**`query_json` format**: JSON text of type `DatabaseQuery`. Fields marked `?` are optional.

```ts
type DatabaseQuery = {
	where?: FilterGroup
	sort?: SortClause[]
	limit?: number
	offset?: number
}

type FilterGroup = {
	logic: string // "and" or "or"
	conditions: FilterCondition[]
}

type FilterCondition = {
	type: string // "comparison" or "group"
	columnId?: string // comparison only
	operator?: string // comparison only: eq, neq, gt, gte, lt, lte, contains, not_contains, starts_with, ends_with, is_empty, is_not_empty
	value?: string // comparison only
	group?: FilterGroup // group only
}

type SortClause = {
	columnId: string
	direction: string // "asc", "desc" or "random"
}
```

**Outputs**

| Name | Description | Value |
| --- | --- | --- |
| `deleted_count` | The number of rows that were deleted. | e.g. `"5"` |

**Example**

```go
matchingRows := db_delete_matching_rows(Args{database_id: "...", query_json: `...`})
send_text_message(Args{
	channel_id:      trigger.channel_id,
	message_content: "Deleted Count: " + matchingRows.deleted_count,
})
```