sql >> データベース >  >> RDS >> Sqlserver

SQLはフィールドを2列に選択します.

    2 つのテーブル間でデータを結合するには、主キーと外部キーの関係が必要です。

    それが関係代数と正規化についての考え方です。そうでなければ、データの相関関係は無意味です。

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

    CROSS JOIN はあらゆる可能性を提供します。 (1,4)、(1,5)、(1, 6) ... (3,6)。それはあなたが望んでいるとは思いません.

    ROW_NUMBER() OVER () 関数をいつでも使用して、両方のテーブルで代理キーを生成できます。 OVER () 句内で必要な方法でデータを並べ替えます。ただし、これはまだ通常の形式ではありません。

    <強>要するに。なぜこれを行うのですか?

    クイック テスト データベース。スポーツ用品や家庭用品の製品を非正規の形で保管します。

    SELECT の結果は何の意味もありません。

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

    ユーザーからのより多くの情報が必要です。




    1. カンマリストでのMySQL検索

    2. OracleデータベースからMariaDBへの移行-詳細

    3. BinaryTarballからMySQL8をセットアップする

    4. MySQLは最新の会話メッセージを取得します