繁体   English   中英

在另一个表中为外键创建新行

Creating new rows in another table for foreign keys

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我的结构类似于

CREATE TABLE b (b_id SERIAL PRIMARY KEY,
                data INTEGER NULL);

CREATE TABLE a (a_id INTEGER PRIMARY KEY,
                b_id INTEGER NULL REFERENCES b(b_id),
                attrib INTEGER);                 
                
INSERT INTO b (data) values(2);
INSERT INTO b (data) values(3);
INSERT INTO b (data) values(4);
INSERT INTO b (data) values(5);

INSERT INTO a VALUES(1, 1, 13);
INSERT INTO a VALUES(2, 2, 12);
INSERT INTO a VALUES(3, 3, 13);
INSERT INTO a VALUES(4, NULL, 14);
INSERT INTO a VALUES(5, NULL, 15);
INSERT INTO a VALUES(6, NULL, 16);

这里我要创建新的唯一行和b和链接那些所以每行a链接到a 在几排a可以链接到同一行中b ,但每一行有NULL b_id应导致并链接到一个新行b

b_id外,表之间没有链接。 可以将b_id假定为任何自动类型(唯一的附加要求是,它应适合作为主键)。

如果可以在单个语句中完成就很好,但这不是必须的。

我可以轻松地创建新的行b对应行有缺失b_ida

INSERT INTO b (data) 
SELECT NULL 
FROM a WHERE a.b_id IS NULL;

但到目前为止还没有成功地构建我想要做什么的更新(我倾向于在所有条目落得a连接到相同的新创建的行,因为如

UPDATE a set b_id = bx.b_id 
FROM b bx 
WHERE NOT EXISTS (SELECT 1 
                  FROM a ax 
                  WHERE ax.b_id = bx.b_id) 
  AND a.b_id IS NULL;

我也完成了没有子选择的版本,但是结果相同。

正确的解决方案之后(对于本示例)有很多可能的结果,一个可能是

援助 出价 属性
1个 1个 13
2个 2个 12
3 3 13
4 4 14
5 5 15
6 6 16

但同样有效的是

援助 出价 属性
1个 1个 13
2个 2个 12
3 3 13
4 6 14
5 4 15
6 5 16

或者

援助 出价 属性
1个 1个 13
2个 2个 12
3 3 13
4 100 14
5 200 15
6 300 16

我认为对此示例适用的测试是

WITH c AS (
  SELECT b_id, COUNT(*) OVER (PARTITION BY b_id) 
  FROM a
) 
SELECT MAX(count) FROM c;

应该返回1并且

SELECT COUNT(*) FROM a WHERE b_id is NULL;

应该返回0

这样做的主要环境是Postgres,但我想让它尽可能地可移植。 如果可能的话,我也想避免使用WHILE

游乐场设置: http : //sqlfiddle.com/#!17/2262c/1

问题暂未有回复.您可以查看右边的相关问题.
3 在播种时,实体框架在另一个表中为每个外键创建一个新记录

我正在尝试使用EF播种数据库。 我有一个包含产品(电话)的表和一个区分不同类型产品的Category表。 我不知道我做错了什么但是在我从nuget控制台更新数据库后,每个种子产品(手机)都会创建一个新的类别记录 。 这与我想要的完全相反。 我希望所有的手机都有一个categor ...

6 删除另一个表中具有外键的行

我正在使用MS SQL Server 2000数据库。 假设我们有三个表A,B,C。 表A的主键是从表B和C引用的。因此,如果要从表A中删除行,则需要从表B和C中删除相应的行(如果存在)。 但是,当从另一个表中引用表B或C的主键并且此层次结构更深时,就会出现实际问题。 是否有任何脚本或方 ...

10 在一个表中创建额外的列与使用外键创建一个新表

我有一个SQLite数据库,该数据库的表包含11列,其中8列作为带有非常长字符串的Text 。 我需要再添加8个“ Text列,这些列可能会或可能不会得到长字符串值。 所以我想知道是否应该将这些额外的8列添加到当前表中或创建一个包含外键的新表? 如果我想使用一些查询来搜索数据库中的 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM