1

正如标题所说,我想插入表 3(list_mail_usr)中表 1 (temp_urs)列中的所有行,以及表 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));
4

2 回答 2

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 并将其作为常数传递,则针对大型表的性能会好得多(x 比 y 大,因为假设您的 ID 上有一个索引)。

于 2012-07-17T18:42:26.947 回答
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

于 2012-07-17T16:41:49.057 回答