SQL 插入多行,一个静态值,一个变量值
SQL insert multiple rows with one static value, one variable ones
我们有一个具有以下设置的数据库:
SiteSecurityID | SiteID | LoginName
---------------+--------+-----------
Auto Gen # Number Username
现在,我们有 35 个站点 ID,每个用户都需要访问每个站点 ID。我无法获得我已尝试成功执行此操作的任何查询。
我可以用这个方法一个一个地做,但是必须有更简单的方法...
INSERT INTO SiteSecurity (SiteID, LoginName)
VALUES ('1', 'user1'), ('2', 'user1');
您可以使用 cross join
生成所有行,假设您有站点和用户的表:
INSERT INTO SiteSecurity (SiteID, LoginName)
SELECT s.SiteId, u.UserName
FROM Sites s CROSS JOIN
users u;
如果您不这样做,您仍然可以即时生成它们。 Table 构造函数因数据库而异,但这给出了方法:
INSERT INTO SiteSecurity (SiteID, LoginName)
SELECT s.SiteId, u.UserName
FROM (VALUES (1), (2), (3), . . . ) s(SiteID) CROSS JOIN
(VALUES ('user1'), ('user2'), . . . ) u(UserName);
编辑:
如果您有现有数据,可以在插入前过滤掉重复数据:
INSERT INTO SiteSecurity (SiteID, LoginName)
SELECT s.SiteId, u.UserName
FROM (VALUES (1), (2), (3), . . . ) s(SiteID) CROSS JOIN
(VALUES ('user1'), ('user2'), . . . ) u(UserName) LEFT JOIN
SiteSecurity ss
ON ss.SiteId = s.SiteId AND ss.LoginName = u.UserName
WHERE ss.SiteId IS NULL;
我们有一个具有以下设置的数据库:
SiteSecurityID | SiteID | LoginName
---------------+--------+-----------
Auto Gen # Number Username
现在,我们有 35 个站点 ID,每个用户都需要访问每个站点 ID。我无法获得我已尝试成功执行此操作的任何查询。
我可以用这个方法一个一个地做,但是必须有更简单的方法...
INSERT INTO SiteSecurity (SiteID, LoginName)
VALUES ('1', 'user1'), ('2', 'user1');
您可以使用 cross join
生成所有行,假设您有站点和用户的表:
INSERT INTO SiteSecurity (SiteID, LoginName)
SELECT s.SiteId, u.UserName
FROM Sites s CROSS JOIN
users u;
如果您不这样做,您仍然可以即时生成它们。 Table 构造函数因数据库而异,但这给出了方法:
INSERT INTO SiteSecurity (SiteID, LoginName)
SELECT s.SiteId, u.UserName
FROM (VALUES (1), (2), (3), . . . ) s(SiteID) CROSS JOIN
(VALUES ('user1'), ('user2'), . . . ) u(UserName);
编辑:
如果您有现有数据,可以在插入前过滤掉重复数据:
INSERT INTO SiteSecurity (SiteID, LoginName)
SELECT s.SiteId, u.UserName
FROM (VALUES (1), (2), (3), . . . ) s(SiteID) CROSS JOIN
(VALUES ('user1'), ('user2'), . . . ) u(UserName) LEFT JOIN
SiteSecurity ss
ON ss.SiteId = s.SiteId AND ss.LoginName = u.UserName
WHERE ss.SiteId IS NULL;