【问题标题】:MySQL insert from another table where field(s) are not nullMySQL 从另一个表插入,其中字段不为空
【发布时间】: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 将它们从其他地方拉出来,这也很好。
  • 我对修改“非空”字段的评论是沿着更改约束以允许空值的思路......对不起,缺乏明确性。过去我不得不删除表字段上的“非空”约束,所以认为这可能是这里的一个选项......

标签: php mysql


【解决方案1】:

您不必创建字段,只需“选择”默认值即可。试试这个:

INSERT INTO table1 (first_name, last_name, password, email_address)
    SELECT firstname, lastname, 'password1', email FROM table2

【讨论】:

  • 另外,您不想将密码保存为纯文本,您应该使用“SELECT firstname, lastname, PASSWORD('password1'), email FROM table2”。 dev.mysql.com/doc/refman/5.0/en/…
  • 哇!感谢各位大侠的及时回复,很快。抱歉,如果我没有澄清,但我确实需要用一个值填充表一中的非空字段,但我认为它需要做的方式是在表 2 中创建所有这些附加字段,以便可以在我的查询中选择它们.谢谢@a_sad_dude,您的回复似乎对我有用……表 2 中没有其他表字段!!!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-28
  • 2012-12-05
  • 1970-01-01
  • 1970-01-01
  • 2018-09-27
  • 2016-01-27
相关资源
最近更新 更多