sql >> Database >  >> RDS >> Sqlserver

sql selecteer een veld in 2 kolommen

Er moet een relatie tussen primaire sleutel en externe sleutel zijn om gegevens tussen twee tabellen samen te voegen.

Dat is het idee over relationele algebra en normalisatie. Anders is de correlatie van de gegevens zinloos.

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

De CROSS JOIN geeft je alle mogelijkheden. (1,4), (1,5), (1, 6) ... (3,6). Ik denk niet dat dat is wat je wilt.

U kunt altijd een ROW_NUMBER() OVER ()-functie gebruiken om in beide tabellen een surrogaatsleutel te genereren. Orden de gegevens zoals u dat wilt in de OVER () -clausule. Dit is echter nog steeds niet in een normale vorm.

Kortom. Waarom doe je dit?

Snelle testdatabase. Slaat producten van sportartikelen en huishoudelijke artikelen op in een niet-normale vorm.

De resultaten van de SELECT zeggen niets.

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

We hebben zeker meer informatie van de gebruiker nodig.




  1. Maandelijks actieve gebruikers (MAU) berekenen in MySQL

  2. Kan root-wachtwoord niet opnieuw instellen met --skip-grant-tables op ubuntu 16

  3. Selecteer query met IN() en zonder enige sortering

  4. TRANSLATE() Functie in Oracle