我有一個INSERT語句看起來類似於此:插入外鍵和數據在一個SELECT語句
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中將每條生成的行表示爲插入語句中的一行?與此類似
東西(只是假設「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'),
);
了,我肯定可以讓兩個不同的表,一個與外鍵,一個與日期,然後以某種方式結合起來,但要點是要有相關的數據全部在同一行。
你可能指的是一個記錄,其中person1是person1,group應該是groupA,dateFrom是1970,dateUntil是2000?這是單記錄嗎?如果是這樣,你可能不想使用IN,因爲它會給你來自groupA和groupB的所有人員,無論他們是person1,person2還是person3。它應該是具體的。 – bipartite