正如标题所说,我想在表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));
答案 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