MySQL:如何从两个表中提取数据并存储到一个表中

MySQL:如何从两个表中提取数据并存储到一个表中,mysql,sql,mysql-error-1242,Mysql,Sql,Mysql Error 1242,我有三个表。2个数据来自2个表,并将其插入另一个表中。 让:tbl_id保存字段id,tbl_msg保存字段msg tbl_id tbl_msg id msg ------ -------- 1234 test_msg 5678 9876 现在,我想要的输出应该在tbl_信息中 id msg --- ------- 1234 test_msg 5678 t

我有三个表。2个数据来自2个表,并将其插入另一个表中。 让:tbl_id保存字段id,tbl_msg保存字段msg

tbl_id               tbl_msg

id                   msg
------               --------
1234                 test_msg
5678
9876
现在,我想要的输出应该在tbl_信息中

id    msg
---   -------
1234  test_msg
5678  test_msg
9876  test_msg
我编写了一个查询,但它显示的错误是:子查询返回的行多于1行。 我的问题如下:


插入到tbl_信息id中,消息值从tbl_id中选择id,从tbl_msg中选择消息您需要编写一个SELECT语句,该语句返回的行与您希望插入的行完全相同

2个内部选择返回tbl_id中的所有id和tbl_msg中的所有msg,这没有多大意义

首先写入选择,例如:

SELECT tbl_id.id, tbl_msg.msg 
FROM tbl_id
JOIN tbl_msg ON tbl_id.fk = tbl_msg.fk
WHERE (...)
然后将其用于插入:

INSERT INTO tbl_info (id, msg)
SELECT tbl_id.id, tbl_msg.msg 
FROM tbl_id
JOIN tbl_msg ON tbl_id.fk = tbl_msg.fk
WHERE (...)
根据OP的意见更新:

INSERT INTO tbl_info (id, msg)
 SELECT tbl_id.id, single_msg.msg 
 FROM tbl_id
 JOIN (SELECT msg 
      FROM tbl_msg 
      WHERE CURDATE()=DATE_FORMAT(date_time,'%Y-%m-%d') 
      ORDER BY date_time DESC LIMIT 1) as single_msg ON 1=1;
这不是很有效,因为将对tbl_id中的每个记录执行内部选择。更有效的解决方案可能是:

SELECT msg INTO @msg
FROM tbl_msg 
WHERE CURDATE()=DATE_FORMAT(date_time,'%Y-%m-%d') 
ORDER BY date_time DESC LIMIT 1;

INSERT INTO tbl_info (id, msg)
    SELECT tbl_id.id, @msg 
    FROM tbl_id;

我不明白这个问题。tbl_msg中只有一个msg吗?如果没有,,哪些消息应该连接到哪个id?我只需要从两个表中获取数据并将数据插入另一个表中。从tbl_id获取所有id,从tbl_msg获取msg,并将所有id和msg一起插入tbl_info。这就是我说他们只有一个msg。因为我通过查询筛选了他们的大量数据:从tbl_msg中选择msg,其中CURDATE=DATE_FORMATdate_time,“%Y-%m-%d”按日期排序_time DESC LIMIT 1。这样他们就不会有任何问题。我不能在这里使用任何外键。没有外键,我必须这样做。他们还有其他方法吗?我的意思是不使用外键,它不必是真正的外键-请参阅更新的答案Dear@GAlz,非常感谢您最后的解决方案。它按照我的要求正常工作。再次感谢您的时间和帮助。