2016-01-05 62 views
0

早安隨機值,T-SQL:插入到連接

我有一個創建了,我想在我的「主表」,Car_Spec鏈接在一起6個表測試數據庫。

我希望我的表「Car_Spec」根據「模型」字段中的內容自動填充'Manufacutre_ID'字段。

即,如果Model_ID是104(熊貓),那麼我想製造ID是102(菲亞特)。

我剛纔創建我的數據庫,並使用下面的代碼表:

CREATE TABLE car_manufacture 
(
    manufacture_ID int NOT NULL IDENTITY(100,1), 
    manufacture_Name varchar(50) NOT NULL, 
    manufacture_Country varchar(50), 
    PRIMARY KEY(manufacture_ID) 
) 

CREATE TABLE car_model 
(
    model_ID int NOT NULL IDENTITY(100,1), 
    manufacture_ID INT, 
    model_name varchar(50) NOT NULL, 
    PRIMARY KEY (model_ID), 
    FOREIGN KEY (manufacture_ID) REFERENCES car_manufacture (manufacture_ID), 
) 

CREATE TABLE car_drive 
(
    drive_ID int NOT NULL, 
    drive_side varchar(10) 
    PRIMARY KEY (drive_ID) 
) 

CREATE TABLE car_litre 
(
    litre_ID int NOT NULL IDENTITY(100,1), 
    litre int, 
    PRIMARY KEY (litre_ID) 
) 

CREATE TABLE car_fueltype 
(
    fuel_ID INT NOT NULL, 
    fuel VARCHAR(20), 
    PRIMARY KEY (fuel_ID) 
) 

CREATE TABLE car_spec 
(
    car_ID INT NOT NULL IDENTITY (100,1), 
    manufacture_ID INT NOT NULL, 
    model_ID INT NOT NULL, 
    drive_ID INT NOT NULL DEFAULT '3', 
    fuel_ID INT NOT NULL DEFAULT '4', 
    age INT, 
    miles INT, 
    registration VARCHAR (10), 
    previous_owners INT, 
    PRIMARY KEY (car_ID), 

    FOREIGN KEY (manufacture_ID) REFERENCES car_manufacture (manufacture_ID), 
    FOREIGN KEY (model_ID) REFERENCES car_model(model_ID), 
    FOREIGN KEY (drive_ID) REFERENCES car_drive (drive_ID), 
    FOREIGN KEY (fuel_ID) REFERENCES car_fueltype(fuel_ID) 
) 

我已填充所有,但使用下面的代碼也是最後一個表:

INSERT INTO car_manufacture (manufacture_Name, manufacture_Country) VALUES 

    ('Volkswagen', 'Germany'), 
    ('Fiat',  'Italy'), 
    ('Seat',  'Spain'), 
    ('Ford',  'American') 

INSERT INTO car_model (manufacture_ID,model_name)VALUES 

    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Volkswagen'),'Polo'), 
    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Volkswagen'),'Golf'), 
    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Fiat'),'Panda'), 
    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Fiat'),'Punto'), 
    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Seat'),'Ibiza'), 
    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Seat'),'Leon'), 
    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Fiat'),'500'), 
    ((Select manufacture_ID from car_manufacture where manufacture_Name = 'Volkswagen'),'Passat') 

INSERT INTO car_drive (drive_ID, drive_side)VALUES 
    (1, 'Left'), 
    (2, 'Right'), 
    (3, 'Unknown') 

INSERT INTO car_litre (litre) Values 
    (1), 
    (1.2), 
    (1.4), 
    (1.6), 
    (1.8), 
    (2) 

INSERT INTO car_fueltype (fuel_id,fuel) values 
(1,'Petrol)'), 
(2,'Diesel'), 
(3,'Gas'), 
(4,'Unknown') 

這是我卡死...

Insert into car_spec (age, car_ID, drive_ID, fuel_ID, manufacture_ID, miles, model_ID, previous_owners, registration) 
Values 

    (
     3, 
     (select TOP 1 model_ID from car_model ORDER BY NEWID()), 
     (select TOP 1 drive_ID from car_drive ORDER BY NEWID()), 
     (select TOP 1 fuel from car_fueltype ORDER BY NEWID()), 
     **THIS IS WHERE I WANT A STATEMENT 'Select manufacture_ID from car_manufacutre based on model_ID,', ** 

車型ID =車型ID。

任何建議將是偉大的,我想過使用變量,但再次,不知道如何工作。我認爲InnerJoin會解決這個問題,但我無法解決這個問題。

感謝 山姆

回答

0

使用insert . . . select。然後你有更多的數據控制權。該查詢將如下所示:

Insert into car_spec(age, car_ID, drive_ID, fuel_ID, manufacture_ID, 
        miles, model_ID, previous_owners, registration 
        ) 
    select t.age, t.model_id, t.drive_id, d.fuel_id, cm.manufacturer_id, 
      . . . 
    from (select 3 as age, 
       (select TOP 1 model_ID from car_model ORDER BY NEWID()) as model_id, 
       (select TOP 1 drive_ID from car_drive ORDER BY NEWID()) as drive_id, 
       (select TOP 1 fuel from car_fueltype ORDER BY NEWID()) as fuel_id 
     ) t join 
     car_model cm 
     on t.model_id = cm.model_id; 
+0

嗨戈登,我不認爲這回答我的問題。 我希望汽車製造商能夠使用此方法進行調查,但是要將它們鏈接在一起時與car_model相關聯的值。 – SamCramphorn

+0

忽略上述內容。我剛剛意識到你做了什麼。我會測試這個併發布我的結果。 – SamCramphorn

+0

@SamCramphorn。 。 。你可以刪除你自己的評論。 –