AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 102634
Accepted
Martin F
Martin F
Asked: 2015-05-28 17:56:33 +0800 CST2015-05-28 17:56:33 +0800 CST 2015-05-28 17:56:33 +0800 CST

Como subtrair registros de uma tabela com base em sua existência em outra

  • 772

Eu tenho uma tabela do Access 2010Assignment

key Empl    Number
key Year    Number
key Week    Number
key Proj    Number

Ele atribui aos funcionários zero ou mais projetos para determinadas semanas de trabalho, portanto, todas as quatro colunas compõem a chave composta. Tenho outra tabela, Import, com estrutura idêntica, contendo dados a serem utilizados para atualização Assignmentde acordo com diferentes opções.

Opção 1 Mantenha todas as atribuições existentes, adicione importações completamente novas e ignore quaisquer importações que já existam.

Posso gerenciar isso usando uma simples consulta de acréscimo:

INSERT INTO Assignment 
SELECT *
FROM Import 

Até agora tudo bem.

Opção 2 Como acima, exceto onde há uma correspondência empregado-ano-semana entre a atribuição e a importação, substitua a atribuição existente pela importação.

Uma abordagem para conseguir isso é primeiro excluir todos os registros com uma correspondência funcionário-ano-semana e, em seguida, acrescentar as importações (como acima). O resultado deve ser substituir correspondências exatas como estão, substituir correspondências parciais (funcionário-ano-semana) por novos projetos e adicionar atribuições completamente novas.

Posso isolar as correspondências por meio desta consulta, chamada Existing:

SELECT a.*
FROM Import AS i INNER JOIN Assignment AS a 
ON a.Empl = i.Empl AND a.Year = i.Year AND a.Week = i.Week

Como posso excluir registros Assignmentque também estão em Existing?

Eu tentei variações sobre isso

DELETE 
FROM Assignment
WHERE IN (Existing)

tudo resultando em mensagens de erro.

A propósito, parece que, se existisse tal animal , eu poderia usar uma MINUS(ou DIFFERENCE) consulta:

Assignment
MINUS
Existing

Uma pequena variação na abordagem seria primeiro excluir os registros com uma correspondência funcionário-ano-semana e uma incompatibilidade de projeto e , em seguida, anexar as importações, como na Opção 1. (Menos exclusões e adições, mas mesmo resultado.)

Posso isolar essas correspondências por meio desta consulta, chamada Existing_exp:

SELECT a.*
FROM Import AS i INNER JOIN Assignment AS a 
ON a.Empl = i.Empl AND a.Year = i.Year AND a.Week = i.Week AND a.Proj <> i.Proj

mas ainda me resta a tarefa de como deletar os registros Assignmentque estão em Existing_exp!

delete subquery
  • 1 1 respostas
  • 1140 Views

1 respostas

  • Voted
  1. Best Answer
    Martin F
    2015-05-29T15:51:39+08:002015-05-29T15:51:39+08:00

    Parece que a resposta estava escondida à vista de todos:

    DELETE a.*
    FROM Import AS i INNER JOIN Assignment AS a 
    ON a.Empl = i.Empl AND a.Year = i.Year AND a.Week = i.Week
    

    ou

    DELETE a.*
    FROM Import AS i INNER JOIN Assignment AS a 
    ON a.Empl = i.Empl AND a.Year = i.Year AND a.Week = i.Week AND a.Proj <> i.Proj
    

    dependendo do que for mais adequado.

    Não sei como não consegui ver da primeira vez!

    • 0

relate perguntas

  • Excluindo todas as duplicatas

  • Limpe todas as tabelas com um DELETE

  • Quais são as práticas recomendadas para excluir permanentemente um banco de dados com segurança?

  • Qual poderia ser o motivo para não permitir uma subconsulta na cláusula de valores?

  • Como converter uma subconsulta Top 1 usando o alias de tabela externa para Oracle?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve