Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

sql chọn một trường thành 2 cột

Phải có một khóa chính cho mối quan hệ khóa ngoài để JOIN dữ liệu giữa hai bảng.

Đó là ý tưởng về đại số quan hệ và chuẩn hóa. Nếu không, sự tương quan của dữ liệu là vô nghĩa.

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

CROSS JOIN sẽ cung cấp cho bạn tất cả các khả năng. (1,4), (1,5), (1, 6) ... (3,6). Tôi không nghĩ đó là điều bạn muốn.

Bạn luôn có thể sử dụng hàm ROW_NUMBER () OVER () để tạo khóa thay thế trong cả hai bảng. Sắp xếp dữ liệu theo cách bạn muốn bên trong mệnh đề OVER (). Tuy nhiên, điều này vẫn không ở bất kỳ dạng Bình thường nào.

Tóm lại. Tại sao làm điều này?

Cơ sở dữ liệu kiểm tra nhanh. Lưu trữ các sản phẩm từ đồ thể thao và đồ gia dụng bằng hình thức không bình thường.

Kết quả của LỰA CHỌN không có ý nghĩa gì.

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

Chúng tôi chắc chắn cần thêm thông tin từ người dùng.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách duy trì cột GEOMETRY hoặc GEOGRAPHY được tính toán

  2. Cách nhận giá trị từ bước1 đến bước2 trong Công việc sql

  3. Tham gia ba bảng với các tham gia khác ngoài INNER JOIN

  4. Chuỗi kết nối máy chủ SQL - dấu chấm (.) Hoặc (cục bộ) hoặc (cục bộ)

  5. Truy vấn phân cấp trong SQL Server 2005