嵌套插入和选择语句

时间:2015-12-11 11:38:56

标签: mysql

我的MySql数据库中有以下结构:

1表称为报告,1表称为产品

我现在想根据选择的产品插入报告。我得到的错误如下:

错误代码:1242。子查询返回超过1行0.000秒

在我的上一个select语句中(仅选择,没有插入)我使用关键字解决了这个错误" IN"但在这种情况下,它不起作用。这是我到目前为止的查询(产生错误)

INSERT INTO reports (report_date, report_emploee, report_content, report_art, report_adressnummer)
VALUES(
NOW(), 
'UpdateMaster', 
'content', 
'AutoUpdate' , 
(SELECT product.product_adressnummer 
FROM product 
WHERE product.product_name='testproduct'
AND product.product_version='2.50c' 
AND product_updateDatum >= '2015-12-11'));

我尝试使用我的select语句创建一个数组,然后在插入到报告期间迭代它,但我没有在sql中获取它。所有在线信息都结合了sql和php来实现它。

如果我执行查询,它将如下所示:

report_date=today
report_emploee='UpdateMaster'
report_content='content'
report_art='AutoUpdate'
report_adressnummer=123,456,789,310,...

但它应该像这样执行:

report_date=today
report_emploee='UpdateMaster'
report_content='content'
report_art='AutoUpdate'
report_adressnummer=123

report_date=today
report_emploee='UpdateMaster'
report_content='content'
report_art='AutoUpdate'
report_adressnummer=456

report_date=today
report_emploee='UpdateMaster'
report_content='content'
report_art='AutoUpdate'
report_adressnummer=789

.......

您的解决方案影响了sql表中的0行。

如果我执行此查询:

SELECT contact.contact_vorname, contact.contact_nachname, contact.contact_eMail
FROM contact 
WHERE contact.contact_adressnummer IN
(SELECT product.product_adressnummer 
FROM product 
WHERE product.product_name='toolstar®TestLX'
AND product.product_version='2.50c' 
AND product_updateDatum >= '2015-12-11');

它返回8行,你的解决方案也应该影响8行,对吗?

1 个答案:

答案 0 :(得分:0)

您遇到的问题是当您尝试插入

的结果时
SELECT product.product_adressnummer 
FROM product 
WHERE product.product_name='testproduct'
AND product.product_version='2.50c' 
AND product_updateDatum >= '2015-12-11'

进入你的桌子。由于这会返回多条记录,因此无法将其插入到一条记录所在的位置。 IN无法解决问题,因为这不会阻止返回多个记录。

如果要为返回的每条记录插入记录,可以使用:

INSERT INTO 
    reports (report_date, report_emploee, report_content, report_art, report_adressnummer)
SELECT
    NOW(), 
    'UpdateMaster', 
    'content', 
    'AutoUpdate' ,
    product.product_adressnummer 
FROM product 
WHERE product.product_name='testproduct'
AND product.product_version='2.50c' 
AND product_updateDatum >= '2015-12-11'