从一个表中选择并INSERT INTO另一个表;使用WHERE&和

时间:2012-02-16 15:10:34

标签: mysql sql

INSERT INTO tblPubInfo i (img_name)
SELECT f.img_name
FROM tblPubFiles f 
WHERE f.img_name<>''
AND f.pub_uid = i.uid

这是我想要做的,但它给了我一个错误。它有什么问题以及如何解决它?

6 个答案:

答案 0 :(得分:4)

您正在以条件(i.uid)引用目标表。 这是不允许的,因为它没有出现在表中(来自子句)。

答案 1 :(得分:4)

在没有提供错误的情况下帮助您有点困难。

但是,如果您的数据库是MySQL,

MySQL不支持INSERTS上的ALIAS

  

INSERT INTO tblPubInfo i(img_name)

应该是:

  

INSERT INTO tblPubInfo(img_name)

见这里:

  

http://dev.mysql.com/doc/refman/5.1/en/insert.html

答案 2 :(得分:1)

不应该是:

INSERT INTO tblPubInfo (img_name)
SELECT f.img_name
FROM tblPubFiles f, tblPubInfo i
WHERE f.img_name<>''
AND f.pub_uid = i.uid

答案 3 :(得分:1)

好像您正在尝试使用insert into语句更新记录。这不起作用。使用以下内容:

UPDATE tblPubInfo i
SET i.img_name = ( SELECT f.img_name 
                   FROM   tblPubFiles f 
                   WHERE  f.img_name is not null 
                   AND    f.pub_uid = i.uid
                 )

答案 4 :(得分:0)

您需要加入Select子句中的两个表,以便为表i使用别名tblPubInfo,如:

INSERT INTO tblPubInfo (img_name) 
SELECT f.img_name
FROM tblPubFiles f 
inner join tblPubInfo i on f.pub_uid = i.uid
WHERE f.img_name <> ''

答案 5 :(得分:0)

试试这个:

INSERT INTO tblPubInfo (img_name) 
SELECT a.img_name
FROM   tblPubFiles a INNER JOIN tblPubInfo b ON a.pub_uid = b.uid
WHERE  CHAR_LENGTH(TRIM(a.img_name)) > 0