我有一个类似于此的插入语句:
insert into memberOf (pid, gid)
select p.pid, g.gid
from person as p,
group as g
where (p.name, g.name) IN (
('person1','groupA'),
('person2','groupA'),
('person3','groupB'),
);
pid和gid组合构成主键,每个键本身显然是一个引用两个不同表的外键;人与团体。 现在,表memberOf包含另外两列:from和until,每个列都是表示该人的时间范围或该组成员的日期。
有什么方法可以将memberOf中的每个结果行表示为此insert语句中的单行?
类似的东西(假设' 1970'将被视为DATE类型的有效成员):
insert into memberOf (pid, gid, from, until)
select p.pid, g.gid, DATE, DATE
from person as p,
group as g
where (p.name, g.name) IN (
('person1','groupA','1970','2000'),
('person2','groupA','1970','2016'),
('person3','groupB','1999','2005'),
);
我再次确定你可以制作两个不同的表,一个带有外键,一个带有日期,然后以某种方式组合它们,但要点是将相关数据全部放在同一行。
答案 0 :(得分:0)
为什么要将日期添加到WHERE
子句?
这不能给你你想要的东西吗?
insert into memberOf (pid, gid, from, until)
select p.pid, g.gid, DATE, DATE
from person as p,
group as g
where (p.name, g.name) IN (
('person1','groupA'),
('person2','groupA'),
('person3','groupB'),
);
插入的数据不是来自WHERE
的{{1}}
答案 1 :(得分:0)
以下查询将适用于DB2 for i。
INSERT INTO
memberOf (pid, gid)
SELECT
p.pid, g.gid
FROM
TABLE(VALUES
('person1','groupA'),
('person2','groupA'),
('person3','groupB')
) AS t(person, group)
INNER JOIN
person AS p ON p.name = t.person
INNER JOIN
group AS g ON g.name = t.group