基于另一个表中的数据插入表(SQL语法)

时间:2017-03-08 17:57:26

标签: sql sql-server-ce sql-insert

我希望我有合适的团队。我没有看到针对SQL问题的单独组。我有我的想法,希望是一个简单的问题。我修改了表格(以保护工作机密),我相信我有一个简单,可重复的例子。下面是构建表并填充一些数据的脚本。我需要一种方法来根据另一个表值在一个表中填充数据。这是出于测试目的。

我有三张桌子LoadingBay,Truck和TruckMake。 Truck有LoadingBay的外键:Truck.LoadingBayId - > LoadingBay.Id。 TruckMake只包含三排“福特”,“通用”和“丰田”,无论好坏,都与任何牌桌无关。

我在LoadingBay中有一些数据。对于Status ='Empty'的每一个LoadingBay行,我想添加一个Truck。要将日期放入LoadingBay,我已成功使用:

INSERT INTO LoadingBay  (Tall, Status) values (1, 'Empty') -- 1 means 'Tall Bay'

为了放入卡车,我然后使用:

INSERT INTO TRUCK (LoadingBayId, Make, Notes, BigEngine) values (1, 'Ford', 'Used Truck', 0)

注意我必须手动装入LoadingBayId,我需要为每辆卡车做这件事。还要注意我放入'福特'而没有参考TruckMake表。

我想为每个装货区放一辆卡车,并尝试了各种组合:

INSERT INTO TRUCK (LoadingBayId, Make, Notes, BigEngine) values (select from LoadingBay where Status = 'Empty')
-- and try this
INSERT INTO TRUCK (LoadingBayId, Make, Notes, BigEngine) values (select LoadingBayId from LoadingBay where Status = 'Empty', 'GM','Random Note',1)

无济于事。

有人可以告诉我如何做到这一点并且还用硬编码的'GM'替换随机从TruckMake中选择一行并且也选择第一行(我想要两个选项)。

我试图研究这个,但还没有找到答案。在我看来,某种ForEach循环可能是一个选项,但其他来源建议你不要在SQL中使用它。相反,人们应该考虑集合。

如果我能提供澄清或更多材料,请告诉我。道歉的标题道歉。我怀疑如果能够形成一个好的头衔,我就不会有问题:)

非常感谢,

戴夫 这是添加数据库并填充它的脚本。我正在使用SQL Server Compact 4.0

-- Script Date: 3/8/2017 9:38 AM  - ErikEJ.SqlCeScripting version 3.5.2.64
-- Database information:
-- Locale Identifier: 1033
-- Encryption Mode: 
-- Case Sensitive: False
-- Database: C:\Andrew DBs\Play.sdf
-- ServerVersion: 4.0.8876.1
-- DatabaseSize: 128 KB
-- SpaceAvailable: 3.999 GB
-- Created: 3/8/2017 8:30 AM

-- User Table information:
-- Number of tables: 3
-- LoadingBay: 6 row(s)
-- Truck: 1 row(s)
-- TruckMake: 3 row(s)

CREATE TABLE [TruckMake] (
  [Id] int IDENTITY (4,1) NOT NULL
, [Make] nchar(100) NOT NULL
);
GO
CREATE TABLE [Truck] (
  [Id] int IDENTITY (3,1) NOT NULL
, [LoadingBayId] int NOT NULL
, [Make] nchar(100) NOT NULL
, [Notes] nchar(100) NULL
, [BigEngine] bit NOT NULL
);
GO
CREATE TABLE [LoadingBay] (
  [Id] int IDENTITY (7,1) NOT NULL
, [Tall] bit NOT NULL
, [Status] nchar(100) NOT NULL
);
GO
SET IDENTITY_INSERT [TruckMake] ON;
GO
INSERT INTO [TruckMake] ([Id],[Make]) VALUES (
1,N'Ford                                                                                                ');
GO
INSERT INTO [TruckMake] ([Id],[Make]) VALUES (
2,N'GM                                                                                                  ');
GO
INSERT INTO [TruckMake] ([Id],[Make]) VALUES (
3,N'Toyota                                                                                              ');
GO
SET IDENTITY_INSERT [TruckMake] OFF;
GO
SET IDENTITY_INSERT [Truck] ON;
GO
INSERT INTO [Truck] ([Id],[LoadingBayId],[Make],[Notes],[BigEngine]) VALUES (
1,1,N'Ford                                                                                                ',N'Used Truck                                                                                          ',0);
GO
SET IDENTITY_INSERT [Truck] OFF;
GO
SET IDENTITY_INSERT [LoadingBay] ON;
GO
INSERT INTO [LoadingBay] ([Id],[Tall],[Status]) VALUES (
1,1,N'Empty                                                                                               ');
GO
INSERT INTO [LoadingBay] ([Id],[Tall],[Status]) VALUES (
2,1,N'Empty                                                                                               ');
GO
INSERT INTO [LoadingBay] ([Id],[Tall],[Status]) VALUES (
3,1,N'Empty                                                                                               ');
GO
INSERT INTO [LoadingBay] ([Id],[Tall],[Status]) VALUES (
4,1,N'Empty                                                                                               ');
GO
INSERT INTO [LoadingBay] ([Id],[Tall],[Status]) VALUES (
5,1,N'Empty                                                                                               ');
GO
INSERT INTO [LoadingBay] ([Id],[Tall],[Status]) VALUES (
6,1,N'Empty                                                                                               ');
GO
SET IDENTITY_INSERT [LoadingBay] OFF;
GO
ALTER TABLE [TruckMake] ADD CONSTRAINT [PK_TruckMake] PRIMARY KEY ([Id]);
GO
ALTER TABLE [Truck] ADD CONSTRAINT [PK_Truck] PRIMARY KEY ([Id]);
GO
ALTER TABLE [LoadingBay] ADD CONSTRAINT [PK_LoadingBay] PRIMARY KEY ([Id]);
GO
ALTER TABLE [Truck] ADD CONSTRAINT [IXX_LoadingBay] UNIQUE ([LoadingBayId]);
GO

0 个答案:

没有答案