【发布时间】:2012-01-04 16:01:38
【问题描述】:
我正在尝试将数据插入基于另一个 (table2) 的表 (table1),唯一的问题是 table1 包含设置为不允许空值的字段。我是否需要在要从中提取数据的 table2 中创建这些字段并用值填充它们?
非空字段示例:密码
如果我没有在我的查询中包含这个,那么我会得到一个错误并且记录没有被插入但是如果我在 table2 中创建字段然后插入到我的查询中它工作正常。这似乎有点不寻常。下面的示例查询:
示例 1(表 2 中没有密码字段):
$insert_new_records_query = "INSERT INTO table1 (first_name, last_name, email_address) ".
"SELECT firstname, lastname, email FROM table2";
这会产生一个错误,提示我必须包含密码字段。
示例 2(表 2 中的密码字段):
$insert_new_records_query = "INSERT INTO table1 (first_name, last_name, password,
email_address) ".
"SELECT firstname, lastname, password = 'password1', email FROM table2";
这允许创建记录。问题是我在表 1 中有更多不为空的字段,我认为我不需要在表 2 中将它们创建为空白字段并将它们插入到我的查询中以创建记录。有没有更好的方法来做到这一点?
【问题讨论】:
-
您是否可以修改 table1 中的“非空”字段以允许空值?
-
你想用这个设置完成什么?
-
@ZackMacomber 这没有任何意义,如果字段允许空值,那么首先就不会存在约束。除非 OP 当然不能控制第一张桌子,但我们缺乏这样的信息
-
您不能将空值放在指定为非空的列中,这就是重点。您必须更改约束以允许空值,或者从某个地方提出有效值。如果你愿意,你可以在 select 上使用 join 将它们从其他地方拉出来,这也很好。
-
我对修改“非空”字段的评论是沿着更改约束以允许空值的思路......对不起,缺乏明确性。过去我不得不删除表字段上的“非空”约束,所以认为这可能是这里的一个选项......