以下是完整查询:
INSERT IGNORE INTO db2.story (created, title, body)
SELECT
FROM_UNIXTIME(n.created),
n.title,
b.body_value
FROM db1.node n, db1.body_field b
WHERE n.nid= b.id and n.type IN ('story');
查询的选择部分返回完整结果,但整个查询仅插入第一行。
此查询有什么问题以及如何解决?
更新:这是db2.story的结构:
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| title | varchar(100) | NO | | NULL | |
| body | longtext | NO | | NULL | |
| teaser | longtext | NO | | NULL | |
| created | datetime | NO | | NULL | |
| visits | int(11) | NO | | NULL | |
| slug | varchar(100) | NO | UNI | NULL | |
+----------+--------------+------+-----+---------+----------------+
答案 0 :(得分:4)
此处的问题是字段slug
存在的唯一键。因为您没有将slug
设置为insert语句中的任何内容,所以对于插入表中的每一行,它都设置相同。由于该值必须是唯一的,因此只有第一次插入才有效。有两种方法可以解决此问题:
slug
slug
字段