sql >> Databáze >  >> RDS >> Sqlserver

sql vyberte pole do 2 sloupců

Mezi dvěma tabulkami musí existovat vztah primárního klíče k cizímu klíči k datům JOIN.

To je myšlenka o relační algebře a normalizaci. Jinak je korelace dat bezvýznamná.

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

CROSS JOIN vám dá všechny možnosti. (1,4), (1,5), (1, 6) ... (3,6). Nemyslím si, že to je to, co chcete.

K vygenerování náhradního klíče v obou tabulkách můžete vždy použít funkci ROW_NUMBER() OVER (). Uspořádejte data tak, jak chcete, uvnitř klauzule OVER (). Toto však stále není v žádné normální formě.

Zkrátka. Proč to dělat?

Databáze rychlých testů. Skladuje produkty ze sportovních potřeb a domácích potřeb nenormální formou.

Výsledky SELECT nic neznamenají.

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

Rozhodně potřebujeme více informací od uživatele.




  1. Kód výjimky zablokování pro PHP, MySQL PDOException?

  2. Jak zpracovat distribuovanou transakci v rámci postgresql?

  3. Smazání řádku na základě maximální hodnoty

  4. Jak zahrnout celkový počet vrácených řádků do sady výsledků z příkazu SELECT T-SQL?