我希望我有合适的团队。我没有看到针对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