Excluir linhas de uma junção à esquerda

T.Poe

Quero juntar duas tabelas e excluí-las.

tabela 1:

|ID| DATA|

mesa 2:

|ID | ID_TAB1|

A consulta é semelhante a esta:

delete from table2 
using table2 as t2 left join table1 as t1 
on t2.ID_TAB1=t1.ID 
where t1.DATA='xxx';

O problema é que existe uma terceira mesa:

Tabela 3:

|ID|ID_TAB2|

Quando eu executo minha declaração, ela falha em dizer

Atualizar ou deletar na tabela table2 viola a restrição de chave estrangeira na tabela table3

Tenho certeza de que não há dados na tabela3 conectados a linhas com, t1.DATA='xxx'então, por que há esse erro? Minha consulta não está correta?

Gordon Linoff

Esta consulta:

delete from table2 
using table2 as t2 left join table1 as t1 
on t2.ID_TAB1=t1.ID 
where t1.DATA='xxx';

Na verdade, está excluindo todas as linhas de table2(ou nenhuma, se não houver correspondência em where. Você não tem nenhuma conexão entre t2e table2, então isso é essencialmente uma junção cruzada).

Conforme explicado (profundamente) na documentação :

Não repita a tabela de destino na using_list, a menos que você deseje configurar uma self-join.

Presumivelmente, a exclusão de todas as linhas está causando o problema com a terceira tabela. Observe que as linhas que você realmente deseja excluir também podem estar causando o problema. Nesse caso, você precisa lidar com os erros usando algum tipo de lógica em cascata.

Você pode expressar isso usando uma usingcláusula e removendo join:

delete from table2 t2
    using table1 t1 
    where t2.ID_TAB1 = t1.ID  and
          t1.DATA = 'xxx';

Ou apenas use existsna wherecláusula:

delete from table2 t2
    where exists (select 1
                  from table1 t1
                  where t1.id = t2.id_tab1 and t1.data = 'xxx'
                 );

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

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

Remova as linhas duplicadas na base de junção à esquerda em uma coluna

Mesclar sqlite "redundante" linhas de junção esquerda em uma matriz javascript para JSON

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

Excluir tabela de dados com junção à esquerda

Junção à esquerda reduzindo o número de linhas retornadas

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

MySQL: Existe uma maneira de acelerar uma junção esquerda procurando por linhas que não correspondem a uma linha em outra tabela?

Conta a soma de uma tabela de junção externa esquerda

Crie uma junção à esquerda com dados de string brutos

como criar uma junção à esquerda de duas colunas no jpa?

A junção à esquerda em uma variável de tabela falha

Linhas de junção esquerda e linhas da tabela direita na mesma coluna

Excluir linhas respeitando uma restrição de tempo

Por que não consigo excluir linhas de uma tabela

Como exibir linhas semelhantes uma vez para junção à esquerda do SQL na mesma tabela

Posso decidir ter x linhas nulas em uma junção à esquerda?

Tabelas de junção à esquerda (1: n) usando Pandas, mantendo o número de linhas igual ao da tabela à esquerda

Tabelas de junção à esquerda (1: n) usando Pandas, mantendo o número de linhas igual ao da tabela à esquerda

A consulta de junção esquerda do MySQL não retorna linhas com valor nulo

"On" pedido de junção à esquerda

Como posso excluir automaticamente outra linha de uma tabela de junção ao excluir uma linha?

Como converter um sql que tem uma junção dentro de uma junção à esquerda para o construtor de consultas?

Como converter um sql que tem uma junção dentro de uma junção à esquerda para o construtor de consultas?

Como realizar uma junção à esquerda de uma lista de datas com uma tabela existente

Selecionar linhas na junção à esquerda que dependem da soma de um campo na outra tabela?

Por que essa junção à esquerda simples retorna dados de linhas sem correspondência?

Excluir linhas e colunas de uma matriz

MySQL faz uma junção à esquerda dependendo de uma condição

TOP lista

quentelabel

Arquivo