Seleção de linhas para excluir com uma junção implícita

xenóide

Tenho duas tabelas com uma relação muitos para um. Posso selecionar itens na tabela "filha" com um critério na tabela pai usando uma junção implícita:

select * from child,parent where child.parentid=parent.id and parent.name like 'foobar%'

Existe uma maneira melhor (mais eficiente, mais elegante) de excluir filhos que uma simples:

delete from child where child.parentid in (select id from parent where parent.name like 'foobar%')

Esta resposta sugere que eu poderia fazer:

delete child from child,parent where child.parentid=parent.id and parent.name like 'foobar%'

Mas no PostgreSql (por meio do SquirrelSQL) recebo um erro de sintaxe ... é claro que tenho nomes de tabela longos, então a solicitação real é mais parecida com:

delete c from child c, parent p where c.parentid=p.id and p.name like 'foobar%'

Então, isso é suportado pelo PG, ou existe outra maneira?

Pontos de bônus: posso excluir itens das duas tabelas usando:

delete from child,parent where child.parentid in (select id from parent where parent.name like 'foobar%')
um cavalo sem nome

Você pode excluir de ambas as tabelas em uma instrução usando um CTE de modificação de dados :

with deleted_parent as (
  delete from parent
  where name like 'foobar%'
  returning id
)
delete from child
where id in (select id from deleted_parent)

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados

Excluir linhas de uma junção à esquerda

T-SQL: Seleção de linhas para excluir por meio de junções

Tentando excluir linhas de uma tabela com base no valor máximo determinado por uma junção com 2 outras tabelas

Seleção de parte de uma linha após excluir linhas que começam com uma expressão específica

Consulta SQL para obter dados de 2 linhas em uma única linha com junção

Seleção de linhas para dataframe panda com base em uma condição

Junção à esquerda com uma quantidade limitada de linhas

Como calcular pontos de controle para uma curva de Bezier com uma determinada função implícita?

SQL usando joins e combinando 2 linhas de uma junção para uma linha com valores em colunas diferentes

Regex para excluir linhas com uma certa quantidade de pontos?

Regex para excluir linhas com uma certa quantidade de pontos?

incapaz de excluir linhas com o caractere *

Eu tenho uma tabela de linhas com caixas de seleção nas colunas. Como faço para selecionar uma determinada caixa de seleção

Eu tenho uma tabela de linhas com caixas de seleção nas colunas. Como faço para selecionar uma determinada caixa de seleção

Correspondência de string com uma representação implícita de uma árvore de sufixo

Como sempre gerar construtores `Table` para o recurso de junção implícita do JOOQ 3.11?

Conversão implícita de A para Alguns (a)

Excluir linhas da tabela com base na seleção da caixa de listagem

Como excluir várias linhas com caixas de seleção no Angular 11

Excluir linhas específicas da seleção para cada loop

Como excluir linhas com base na combinação de valores de uma coluna em R?

Excluir objetos com caixas de seleção

Formtastic in activeadmin: Existe uma maneira de criar vários registros de junção com uma entrada de seleção com multiple: true para o modelo associado?

Dedução do argumento da função de modelo com uma conversão implícita

Buscar uma única linha de duas linhas de uma tabela com junção no SQL Server

Forçando C ++ a preferir uma sobrecarga com uma conversão implícita em vez de um modelo

Como posso excluir várias linhas de uma tabela com outra condição?

Como excluir linhas com base em uma condição na variável de fator em R

Aplicação de linhas exclusivas em uma tabela de junção muitos para muitos

TOP lista

quentelabel

Arquivo