sql >> Database teknologi >  >> RDS >> Sqlserver

sql vælg et felt i 2 kolonner

Der skal være en primær nøgle til fremmednøgle-relation til JOIN-data mellem to tabeller.

Det er ideen om relationel algebra og normalisering. Ellers er korrelationen mellem dataene meningsløs.

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

CROSS JOIN giver dig alle muligheder. (1,4), (1,5), (1, 6) ... (3,6). Jeg tror ikke, det er det, du ønsker.

Du kan altid bruge en ROW_NUMBER() OVER () funktion til at generere en surrogatnøgle i begge tabeller. Bestil dataene som du vil inde i OVER () klausulen. Dette er dog stadig ikke i nogen normal form.

Kort sagt. Hvorfor gøre dette?

Hurtig testdatabase. Opbevarer produkter fra sportsartikler og boligartikler i ikke-normal form.

Resultaterne af SELECT betyder ikke noget.

-- 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

Vi har bestemt brug for mere information fra brugeren.




  1. hvordan man kontrollerer værditypen i postgres

  2. Delvis indeks bruges ikke i ON CONFLICT-klausulen, mens du udfører en upsert i Postgresql

  3. MySQL-forespørgsel - indentiyfing data ved hjælp af URL-navne, hvor data er organiseret i et hieraki

  4. Tildel en Select til en variabel i en lagret procedure