INNER JOIN com ON Todas as colunas exceto uma coluna

Swe Zin Hsu Kyi

Eu tenho 2 tabelas (Tabela1 e Tabela2). O esquema de ambas as tabelas é exatamente o mesmo e ambos podem ter um conjunto de registros duplicado, exceto IDs, pois o ID é gerado automaticamente.

Tabela1 e Tabela2

Eu gostaria de obter o conjunto comum de registros, mas com ID a seguir como ID da Tabela1. Então, eu procuro usando o Inner join. Funciona como eu esperava.

SELECT Table1.ID, Table1.Param1, Table1.Param2, Table1.Param3
INTO #Common
FROM Table1
INNER JOIN Table2 ON Table1.Param1 = Table2.Param1
  AND Table1.Param2 = Table2.Param2
  AND Table1.Param3 = Table2.Param3

No entanto, no uso real, o número total de parâmetros em ambas as tabelas será em torno de 100. Portanto, o número total de comparação dentro da cláusula ON aumentará para 100. Como posso fazer junção interna excluindo uma coluna em vez de comparar todas as colunas na cláusula ON?

Ao remover a coluna ID de ambas as tabelas e fazer a interseção também não é possível, pois ainda quero extrair a ID da Tabela1 para outro propósito. Posso alcançar o comum de 2 tabelas removendo ID e comparando essas 2 tabelas. No entanto, isso ainda não atende ao meu requisito, já que preciso obter a ID da Tabela 1 para esses dados comuns.

SELECT * INTO #TemporaryTable1 FROM Table1
ALTER TABLE #TemporaryTable1 DROP COLUMN ID

SELECT * INTO #TemporaryTable2 FROM Table2
ALTER TABLE #TemporaryTable2 DROP COLUMN ID

SELECT * INTO #Common FROM (SELECT * FROM #TemporaryTable1 INTERSECT SELECT * FROM #TemporaryTable2) data
SELECT * FROM #Common
vaca

Se entendi seu problema corretamente, acho que você poderia gerar dinamicamente a consulta que deseja usar usando o seguinte código:

DECLARE @SQL nvarchar(max) = 'SELECT  ',
    @TBL1 nvarchar(50) = 'data',
    @TBL2 nvarchar(50) = 'data1',
    @EXCLUDEDCOLUMNS nvarchar(100)= 'ID,col1'

-- column selection
SELECT @sql += @tbl1 + '.' + COLUMN_NAME + ' ,
        '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TBL1

-- from clause and remove last ,

set @SQL = LEFT(@sql,LEN(@sql) - 5)


SET @sql += '
FROM ' + @TBL1 + ' INNER JOIN
     ' + @TBL2 + '
  ON '

-- define the on clause
SELECt @SQL  += @tbl1 + '.' + COLUMN_NAME + ' = '+ @tbl2 + '.' + COLUMN_NAME +',
     '
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = @TBL1
  AND COLUMN_NAME not in (@EXCLUDEDCOLUMNS)

--remove last ,

set @SQL = LEFT(@sql,LEN(@sql) - 3)

--SELECt @SQL
EXEC SP_EXECUTESQL @sql 

Antes de executar, certifique-se de que @sql foi gerado corretamente. escolha as colunas que deseja excluir de sua cláusula on usando o parâmetro @EXCLUDEDCOLUMNS.

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

Selecione todas as colunas, exceto uma coluna no CakePHP?

Selecione todas as colunas, exceto uma coluna no bigquery

Retorna todas as colunas, exceto linhas com um duplicateID em uma coluna

Como selecionar todas as colunas de uma tabela, exceto uma coluna?

Como pegar todas as colunas, exceto uma coluna no Data Frame Python?

Como selecionar todas as colunas, exceto uma coluna em pandas?

Selecione todas as colunas com GROUP BY uma coluna

exibir todas as colunas com uma coluna mascarada

Combine todas as colunas exceto uma coluna em uma lista em uma nova coluna pandas

Pesquise o valor em todas as colunas DataFrame (exceto a primeira coluna!) E adicione uma nova coluna com o nome da coluna correspondente

Como dimensionar todas as colunas, exceto a última coluna?

Como dimensionar todas as colunas, exceto a última coluna?

Todas as colunas arredondadas, exceto a nova coluna

Pandas criam novas colunas com base nos valores de todas as colunas existentes, exceto a primeira coluna

INNER JOIN com uma CONTRA COLUNA?

Subtraia a primeira linha em uma coluna dela mesma e todas as linhas dessa coluna, para todas as colunas exceto uma, em R

Como INNER JOIN uma coluna para duas colunas diferentes?

mude todos os valores no dataframe para todas as colunas, exceto para uma coluna particular usando R

Como selecionar todas as colunas, exceto uma coluna como valores definidos pelo usuário

retornar todas as colunas exceto uma matriz

Hive Como selecionar todas as colunas, exceto uma?

Como agrupar por todas as colunas, exceto uma?

Selecione todas as colunas, exceto uma no MySQL?

Crie uma coluna de seis colunas diferentes Onde todas as colunas de uma linha contêm um valor nulo exceto um

Como comparar todas as colunas com uma coluna em pandas?

Condições para combinar todas as colunas com uma coluna

Selecione todas as colunas, exceto coluna de incremento automático

Exclua todas as linhas com valores acima de 100, exceto para uma coluna

Remova linhas com NAs em todas as colunas, exceto colunas especificadas