INSERT FROM 2个表复制表1中1列的所有行,只复制表3中1列的最后一行

时间:2012-07-17 16:27:55

标签: php mysql insert

正如标题所说,我想在表3(temp_urs)的列中插入表3(list_mail_usr)中的所有行,并且只是表2中1列的最后一行,您可以看到,所有行第1列的ID与list_mail_nom表的list_id列中的最后一行相同。

$tmp_usr = "INSERT INTO list_mail_usr (id_usuario,list_id)
SELECT temp_urs.id_usuario
JOIN list_mail_nom.list_id
WHERE MAX(ID) FROM list_mail_nom.list_id
";

这是我到目前为止所拥有的。它显然不起作用;( 有什么建议吗?

这个几乎可以工作但是从temp_usr插入每一行65次

$tmp_usr = "INSERT INTO list_mail_usr (id_usuario,list_id)
            SELECT temp_usr.id_usuario,list_mail_nom.list_id
            FROM temp_usr,list_mail_nom";
$insert = $asies -> query($tmp_usr) or die (mysqli_error($asies));

2 个答案:

答案 0 :(得分:2)

您没有正确使用聚合函数。为了做你想做的事,你将需要GROUP BY并使用HAVING。一个更简单的查询将是:

INSERT INTO new_table (new_a, new_b)
SELECT x.col, y.col
FROM x, y
WHERE y.id = (SELECT MAX(id) FROM y)

对于大型表,MySQL在优化子查询方面的困难将变得明显。如果你能分别找到最大ID和将它作为常量传递,对大型表的性能会更好(大于大y,因为假设你的ID上有索引)。

答案 1 :(得分:1)

你需要告诉MySQL VALUES来自你的子查询:

$tmp_usr = "INSERT INTO list_mail_usr (id_usuario,list_id)
VALUES(
SELECT temp_urs.id_usuario, some_other_field_name
JOIN list_mail_nom.list_id
WHERE MAX(ID) FROM list_mail_nom.list_id)
";

此外,您的选择应输出您输入到list_mail_usr的相同数量的字段。我使用some_other_field_name

在上述查询中表示了其他字段名称