none
Unir duas tabelas que não tem um campo igual (e realmente não precisa) RRS feed

  • Pergunta

  • Pessoal! Boa noite!

    Preciso de uma ajuda:

    Tenho duas tabelas, uma de veículos, outra de cargas:

    A primeira mostra a cidade onde o veículo está, por exemplo:

    Veic 1 = Concórdia;

    Veic 2 = Chapecó;

    Veic 3 = Seara.

    A segunda tabela tem o local das cargas, exemplo:

    Carga 1 = Irani;

    Carga 2 = Maravilha;

    Carga 3 = Jaborá.

    Quero uma consulta, que faça a união disso tudo, retornando:

    Concórdia - Irani

    Concórdia - Maravilha

    Concórdia - Jaborá

    Chapecó - Irani

    Chapecó - Maravilha

    Chapecó - Jaborá

    Seara - Irani

    Seara - Maravilha

    Seara - Jaborá

    Digamos assim, preciso de todas as variações entre as cidades das duas tabelas.

    Não consegui encontrar algo de jeito algum lembrando que não tem vínculo entre as tabelas, e também, nem poderia ter, pois preciso que fique deste jeito mesmo.

    Se alguém tiver alguma ideia agradeço.

    Forte abraço,

    Robson.


    Robson Giovanni Parisoto.

    segunda-feira, 8 de julho de 2019 21:29

Respostas

Todas as Respostas

  • Deleted
    segunda-feira, 8 de julho de 2019 21:41
  • Excelente José!

    Muito obrigado, inclusive pela dica do Cartesiano (sempre bom estudar novamente)

    Forte abraço,


    Robson Giovanni Parisoto.

    segunda-feira, 8 de julho de 2019 21:46
  • Robson,

    Complementando a resposta do José Diz, além do produto cartesiano que pode ser gerado através do uso do operador Cross Join, existe outro conceito muito importante na matemática chamado Análise Combinatória, a qual nos permite através de uma combinação de letras e números identificar possíveis regras ou comportamentos.

    Podemos determinar a análise combinatória como sendo um conjunto de possibilidades constituídos por elementos finitos, a mesma baseia-se em critérios que possibilitam a contagem. Realizamos o seu estudo na lógica matemática, analisando possibilidades e combinações.

    Por exemplo: Descubra quantos números com 3 algarismos conseguimos formar com o conjunto numérico {1, 2, 3}, olha a teoria de conjuntos aí gente….

    • Conjunto de elementos finito: {1, 2, 3}.
    • Conjunto de possibilidades de números com 3 algarismos: {123, 132, 213, 231, 312, 321}.

    A análise combinatória estuda os seguintes conteúdos:

    • Princípio fundamental da contagem;
    • Fatorial;
    • Permutação simples;
    • Permutação com repetição;
    • Arranjo simples; e
    • Combinação simples.

    Eu criei a algum tempo um exemplo em meu blog, que apresenta justamente este conceito aplicado a um gerador de placas de carros, acessando este post você vai poder conhecer mais sobre este conceito: https://pedrogalvaojunior.wordpress.com/2019/03/27/dica-do-mes-aplicando-analise-combinatoria-no-microsoft-sql-server/

    Mas quero apresentar aqui o exemplo que utilizei que faz justamente uso do Cross Join: 

    — Criando a Tabela LetrasCombinadas para armazenar todas as combinações de Letras —
    Create Table LetrasCombinadas
    (CodigoSequencialLetrasCombinadas SmallInt Primary Key Identity(1,1) Not Null,
    SequencialDeLetrasCombinadas Char(3) Not Null)
    Go
    
    — Criando a Tabela Numeracao para armazenar a faixa numérica de 1 até 9999 —
    Create Table Numeracao
    (CodigoNumeracao SmallInt Primary Key Identity(1,1) Not Null)
    Go
    
    — Criando a Tabela Placas para armazenar o CodigoSequencialLetrasCombinadas e o número da Placa —
    Create Table Placas
    (CodigoSequencialPlacas Int Primary Key Identity(1,1) Not Null,
    CodigoSequencialLetrasCombinadas SmallInt Not Null,
    CodigoSequencialNumeroPlacas SmallInt Not Null)
    Go
    
    — Inserindo a distribuição de Faixas de Placas Por Estado —
    Insert Into FaixasDePlacasPorEstado Values (‘AAA0001′,’BEZ9999′,’Paraná’)
    Insert Into FaixasDePlacasPorEstado Values (‘BFA0001′,’GKI9999′,’São Paulo’)
    Insert Into FaixasDePlacasPorEstado Values (‘GKJ0001′,’HOK9999′,’Minas Gerais’)
    Insert Into FaixasDePlacasPorEstado Values (‘HOL0001′,’HQE9999′,’Maranhão’)
    Insert Into FaixasDePlacasPorEstado Values (‘HQF0001′,’HTW9999′,’Mato Grosso do Sul’)
    Insert Into FaixasDePlacasPorEstado Values (‘HTX0001′,’HZA9999′,’Ceará’)
    Insert Into FaixasDePlacasPorEstado Values (‘HZB0001′,’IAP9999′,’Sergipe’)
    Insert Into FaixasDePlacasPorEstado Values (‘IAQ0001′,’JDO9999′,’Rio Grande do Sul’)
    Insert Into FaixasDePlacasPorEstado Values (‘JDP0001′,’JKR9999′,’Distrito Federal’)
    Insert Into FaixasDePlacasPorEstado Values (‘JKS0001′,’JSZ9999′,’Bahia’)
    Insert Into FaixasDePlacasPorEstado Values (‘JTA0001′,’JWE9999′,’Pará’)
    Insert Into FaixasDePlacasPorEstado Values (‘JWF0001′,’JXY9999′,’Amazonas’)
    Insert Into FaixasDePlacasPorEstado Values (‘JXZ0001′,’KAU9999′,’Mato Grosso’)
    Insert Into FaixasDePlacasPorEstado Values (‘KAV0001′,’KFC9999′,’Goiás’)
    Insert Into FaixasDePlacasPorEstado Values (‘KFD0001′,’KME9999′,’Pernambuco’)
    Insert Into FaixasDePlacasPorEstado Values (‘KMF0001′,’LVE9999′,’Rio de Janeiro’)
    Insert Into FaixasDePlacasPorEstado Values (‘LVF0001′,’LWQ9999′,’Piauí’)
    Insert Into FaixasDePlacasPorEstado Values (‘LWR0001′,’MMM9999′,’Santa Catarina’)
    Insert Into FaixasDePlacasPorEstado Values (‘MMN0001′,’MOW9999′,’Paraíba’)
    Insert Into FaixasDePlacasPorEstado Values (‘MOX0001′,’MTZ9999′,’Espírito Santo’)
    Insert Into FaixasDePlacasPorEstado Values (‘MUA0001′,’MVK9999′,’Alagoas’)
    Insert Into FaixasDePlacasPorEstado Values (‘MVL0001′,’MXG9999′,’Tocantins’)
    Insert Into FaixasDePlacasPorEstado Values (‘MXH0001′,’MZM9999′,’Rio Grande do Norte’)
    Insert Into FaixasDePlacasPorEstado Values (‘MZN0001′,’NAG9999′,’Acre’)
    Insert Into FaixasDePlacasPorEstado Values (‘NAH0001′,’NBA9999′,’Roraima’)
    Insert Into FaixasDePlacasPorEstado Values (‘NBB0001′,’NEH9999′,’Rondônia’)
    Insert Into FaixasDePlacasPorEstado Values (‘NEI0001′,’NFB9999′,’Amapá’)
    Insert Into FaixasDePlacasPorEstado Values (‘NFC0001′,’NGZ9999′,’Goiás’)
    Insert Into FaixasDePlacasPorEstado Values (‘NHA0001′,’NHT9999′,’Maranhão’)
    Insert Into FaixasDePlacasPorEstado Values (‘NHU0001′,’NIX9999′,’Piauí’)
    Insert Into FaixasDePlacasPorEstado Values (‘NIY0001′,’NJW9999′,’Mato Grosso’)
    Insert Into FaixasDePlacasPorEstado Values (‘NJX0001′,’NLU9999′,’Goiás’)
    Insert Into FaixasDePlacasPorEstado Values (‘NLV0001′,’NMO9999′,’Alagoas’)
    Insert Into FaixasDePlacasPorEstado Values (‘NMP0001′,’NNI9999′,’Maranhão’)
    Insert Into FaixasDePlacasPorEstado Values (‘NNJ0001′,’NOH9999′,’Rio Grande do Norte’)
    Insert Into FaixasDePlacasPorEstado Values (‘NOI0001′,’NPB9999′,’Amazonas’)
    Insert Into FaixasDePlacasPorEstado Values (‘NPC0001′,’NPQ9999′,’Mato Grosso’)
    Insert Into FaixasDePlacasPorEstado Values (‘NPR0001′,’NQK9999′,’Paraíba’)
    Insert Into FaixasDePlacasPorEstado Values (‘NQL0001′,’NRE9999′,’Ceará’)
    Insert Into FaixasDePlacasPorEstado Values (‘NRF0001′,’NSD9999′,’Mato Grosso do Sul’)
    Insert Into FaixasDePlacasPorEstado Values (‘NSE0001′,’NTC9999′,’Pará’)
    Insert Into FaixasDePlacasPorEstado Values (‘NTD0001′,’NTW9999′,’Bahia’)
    Insert Into FaixasDePlacasPorEstado Values (‘NTX0001′,’NUG9999′,’Mato Grosso’)
    Insert Into FaixasDePlacasPorEstado Values (‘NUH0001′,’NUL9999′,’Roraima’)
    Insert Into FaixasDePlacasPorEstado Values (‘NUM0001′,’NVF9999′,’Ceará’)
    Insert Into FaixasDePlacasPorEstado Values (‘NVG0001′,’NVN9999′,’Sergipe’)
    Insert Into FaixasDePlacasPorEstado Values (‘NVO0001′,’NWR9999′,’Goiás’)
    Insert Into FaixasDePlacasPorEstado Values (‘NWS0001′,’NXQ9999′,’Maranhão’)
    Insert Into FaixasDePlacasPorEstado Values (‘NXR0001′,’NXT9999′,’Acre’)
    Insert Into FaixasDePlacasPorEstado Values (‘NXU0001′,’NXW9999′,’Pernambuco’)
    Insert Into FaixasDePlacasPorEstado Values (‘NXX0001′,’NYG9999′,’Minas Gerais’)
    Insert Into FaixasDePlacasPorEstado Values (‘NYH0001′,’NZZ9999′,’Bahia’)
    Insert Into FaixasDePlacasPorEstado Values (‘OAA0001′,’OAO9999′,’Amazonas’)
    Insert Into FaixasDePlacasPorEstado Values (‘OAP0001′,’OBS9999′,’Mato Grosso’)
    Insert Into FaixasDePlacasPorEstado Values (‘OBT0001′,’OCA9999′,’Pará’)
    Insert Into FaixasDePlacasPorEstado Values (‘OCB0001′,’OCU9999′,’Ceará’)
    Insert Into FaixasDePlacasPorEstado Values (‘OCV0001′,’ODT9999′,’Espírito Santo’)
    Insert Into FaixasDePlacasPorEstado Values (‘ODU0001′,’OEI9999′,’Piauí’)
    Insert Into FaixasDePlacasPorEstado Values (‘OEJ0001′,’OES9999′,’Sergipe’)
    Insert Into FaixasDePlacasPorEstado Values (‘OET0001′,’OFH9999′,’Paraíba’)
    Insert Into FaixasDePlacasPorEstado Values (‘OFI0001′,’OFW9999′,’Pará’)
    Insert Into FaixasDePlacasPorEstado Values (‘OFX0001′,’OGG9999′,’Paraíba’)
    Insert Into FaixasDePlacasPorEstado Values (‘OGH0001′,’OHA9999′,’Goiás’)
    Insert Into FaixasDePlacasPorEstado Values (‘OHB0001′,’OHK9999′,’Alagoas’)
    Insert Into FaixasDePlacasPorEstado Values (‘OHL0001′,’OHW9999′,’Rondônia’)
    Insert Into FaixasDePlacasPorEstado Values (‘OHX0001′,’OIQ9999′,’Ceará’)
    Insert Into FaixasDePlacasPorEstado Values (‘OIR0001′,’OJK9999′,’Maranhão’)
    Insert Into FaixasDePlacasPorEstado Values (‘OJR0001′,’OKC9999′,’Rio Grande do Norte’)
    Insert Into FaixasDePlacasPorEstado Values (‘OKI0001′,’OLG9999′,’Bahia’)
    Insert Into FaixasDePlacasPorEstado Values (‘OLH0001′,’OLN9999′,’Tocantins’)
    Insert Into FaixasDePlacasPorEstado Values (‘OLO0001′,’OMH9999′,’Minas Gerais’)
    Insert Into FaixasDePlacasPorEstado Values (‘OMI0001′,’OOF9999′,’Goiás’)
    Insert Into FaixasDePlacasPorEstado Values (‘OOG0001′,’OOU9999′,’Mato Grosso do Sul’)
    Insert Into FaixasDePlacasPorEstado Values (‘OOV0001′,’ORC9999′,’Minas Gerais’)
    Insert Into FaixasDePlacasPorEstado Values (‘ORD0001′,’ORM9999′,’Alagoas’)
    Insert Into FaixasDePlacasPorEstado Values (‘ORN0001′,’OSV9999′,’Ceará’)
    Insert Into FaixasDePlacasPorEstado Values (‘OSW0001′,’OTZ9999′,’Pará’)
    Insert Into FaixasDePlacasPorEstado Values (‘OUA0001′,’OUE9999′,’Piauí’)
    Insert Into FaixasDePlacasPorEstado Values (‘OUF0001′,’OVD9999′,’Bahia’)
    Insert Into FaixasDePlacasPorEstado Values (‘OVE0001′,’OWC9999′,’Espírito Santo’)
    Insert Into FaixasDePlacasPorEstado Values (‘OWD0001′,’OYG9999′,’Santa Catarina’)
    Insert Into FaixasDePlacasPorEstado Values (‘PEE0001′,’PFQ9999′,’Pernambuco’)
    Insert Into FaixasDePlacasPorEstado Values (‘PFR0001′,’PGK9999′,’Pernambuco’)
    Insert Into FaixasDePlacasPorEstado Values (‘PGL0001′,’PHE9999′,’Pernambuco’)
    Insert Into FaixasDePlacasPorEstado Values (‘SAV0001′,’SAV9999′,’São Paulo’)
    Go
    
    — Inserindo 9999 linhas de registros lógicos na Tabela Numeracao —
    Insert Into Numeracao Default Values
    Go 9999
    
    

    É neste parte do exemplo que faço uso do Cross Join, o qual vai nos permitir através da combinação de valores aplicar o conceito de análise combinatória:

    — Montando a CTE Recursiva para Gerar todas as combinações de Letras —
    ;With CTEMeuAlfabeto
    As
    (Select * From (Values (‘A’),(‘B’),(‘C’),(‘D’),(‘E’),(‘F’),(‘G’),(‘H’),(‘I’),(‘J’),(‘K’),
    (‘L’),(‘M’),(‘N’),(‘O’),(‘P’),(‘Q’),(‘R’),(‘S’),(‘T’),(‘U’),(‘V’),
    (‘W’),(‘X’),(‘Y’),(‘Z’)) As Alfabeto (LetrasDoAlfabeto)
    )
    — Inserindo as combinações de letras na Tabela LetrasCombinadas —
    Insert Into LetrasCombinadas
    Select Distinct Concat(A1.LetrasDoAlfabeto, A2.LetrasDoAlfabeto, A3.LetrasDoAlfabeto) As ConcatenacaoLetrasCombinadas
    From CTEMeuAlfabeto A1
    Cross Join CTEMeuAlfabeto A2 — Aqui que a mágia acontece —
    Cross Join CTEMeuAlfabeto A3 — O cross join vai cruzar e combinar todas as letras —
    Order By ConcatenacaoLetrasCombinadas Asc
    Go
     
    — Validando os dados inseridos na Tabela LetrasCombinadas —
    Select * From LetrasCombinadas
    Go

    Espero que este exemplo possa lhe ajudar a entender estes conceitos.


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados Relacional e Data Warehouse | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    segunda-feira, 8 de julho de 2019 22:57