Preciso deletar os registros onde UserIndex = 1 e ItemNumber = 5202 nas três tabelas, tudo em uma única consulta. Estou usando o SQL 2008 R2.
Tabela UserInfo1
UserIndex | Número de item | Contagem de itens |
---|---|---|
1 | 5202 | 99 |
1 | 1600 | 50 |
2 | 155 | 2 |
3 | 125 | 60 |
Tabela UserInfo2
UserIndex | Número de item | Contagem de itens |
---|---|---|
8 | 1265 | 50 |
4 | 1899 | 41 |
1 | 5202 | 99 |
3 | 125 | 60 |
Tabela UserInfo3
UserIndex | Número de item | Contagem de itens |
---|---|---|
6 | 5205 | 85 |
1 | 6666 | 41 |
3 | 4455 | 44 |
1 | 5202 | 50 |
Estou tentando usar essa consulta com duas tabelas, mas não funciona:
DELETE ItemInfo1, ItemInfo2
FROM ItemInfo1
LEFT JOIN ItemInfo2
ON ItemInfo1.UserIndex = ItemInfo2.UserIndex
WHERE ItemInfo1.UserIndex = 1;
Normalmente, você não pode excluir de mais de uma tabela em uma única
DELETE
instrução T-SQL.É possível obter o mesmo efeito usando gatilhos ou chaves estrangeiras em cascata com uma
ON DELETE CASCADE
opção, mas provavelmente não é disso que você precisa.Se você deseja apenas enviar um único lote de texto e garantir que todas as três ações de exclusão sejam bem-sucedidas ou falhadas como uma unidade, use uma transação:
De maneira mais geral, é um padrão ruim ter tabelas semelhantes diferenciadas apenas por um número de sufixo. Isso sugere que você realmente deveria ter uma única tabela em vez de uma coluna extra para distinguir os três conjuntos.
Uma única declaração
DELETE
seria então trivial.