Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

sql selecione um campo em 2 colunas


Deve haver um relacionamento de chave primária para chave estrangeira para dados JOIN entre duas tabelas.

Essa é a ideia sobre álgebra relacional e normalização. Caso contrário, a correlação dos dados não tem sentido.

http://en.wikipedia.org/wiki/Database_normalization

O CROSS JOIN lhe dará todas as possibilidades. (1,4), (1,5), (1,6) ... (3,6). Eu não acho que é isso que você quer.

Você sempre pode usar uma função ROW_NUMBER() OVER() para gerar uma chave substituta em ambas as tabelas. Ordene os dados da maneira que desejar dentro da cláusula OVER (). No entanto, isso ainda não está em nenhuma forma Normal.

Resumindo. Por que fazer isso?

Banco de dados de teste rápido. Armazena produtos de artigos esportivos e artigos para casa usando forma não normal.

Os resultados do SELECT não significam nada.
-- Just play
use tempdb;
go

-- Drop table
if object_id('abnormal_form') > 0
drop table abnormal_form
go

-- Create table
create table abnormal_form
(
    Id int,
    Category int,
    Name varchar(50)
);

-- Load store products
insert into abnormal_form values
(1, 1, 'Bike'),
(2, 1, 'Bat'),
(3, 1, 'Ball'),
(4, 2, 'Pot'),
(5, 2, 'Pan'),
(6, 2, 'Spoon');

-- Sporting Goods
select * from abnormal_form where Category = 1

-- Home Goods
select * from abnormal_form where Category = 2

-- Does not mean anything to me
select Id1, Id2 from
(select ROW_NUMBER () OVER (ORDER BY ID) AS Rid1, Id as Id1 
 from abnormal_form where Category = 1) as s
join
(select ROW_NUMBER () OVER (ORDER BY ID) AS Rid2, Id as Id2 
 from abnormal_form where Category = 2) as h
on s.Rid1 = h.Rid2

Nós definitivamente precisamos de mais informações do usuário.