Usuário com melhor resposta
Unir duas tabelas que não tem um campo igual (e realmente não precisa)

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.
Respostas
-
Deleted
- Marcado como Resposta Robson Giovanni Parisoto segunda-feira, 8 de julho de 2019 21:45
Todas as Respostas
-
Deleted
- Marcado como Resposta Robson Giovanni Parisoto segunda-feira, 8 de julho de 2019 21:45
-
-
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]