mysql-长查询中重复子查询的替代方案

mysql-长查询中重复子查询的替代方案,mysql,subquery,Mysql,Subquery,我将一个表的一行插入到另一个表中,为此我有一个如下的查询 INSERT INTO table1 (id,name,fieldname,address) SELECT (SELECT id FROM usertable WHERE name = 'namevalue'), name, ( SELECT fieldname FROM fielddata WHERE id IN (SELECT id FROM usertable

我将一个表的一行插入到另一个表中,为此我有一个如下的查询

INSERT INTO table1 
        (id,name,fieldname,address) 
SELECT (SELECT id FROM usertable WHERE name = 'namevalue'),
        name,
       ( SELECT fieldname FROM fielddata WHERE id IN 
         (SELECT id FROM usertable  WHERE name = 'namevalue') ),
       address 
FROM   sourcetable 
WHERE  cond = 'value' 
在上面的查询中,下面的子查询重复了两次,是否有一种方法可以只使用一次子查询并保留值并在其他地方使用它

SELECT id FROM usertable WHERE name = 'namevalue'
如果需要更多详细信息,请告诉我。

试试以下方法:

INSERT INTO table1 
    (id,name,fieldname,address) 
SELECT sub.id, 
   sub.name,
   ( SELECT fieldname FROM fielddata WHERE id IN sub.id ),
   sub.address
FROM
(
    SELECT (SELECT id FROM usertable WHERE name = 'namevalue') id,
        name,
        address 
    FROM sourcetable 
    WHERE cond = 'value' 
) sub
了解:

INSERT INTO table1 (id, name, fieldname, address)
SELECT usertable.id,
       sourcetable.name,
       fielddata.fieldname,
       sourcetable.address
FROM   sourcetable
  JOIN usertable ON sourcetable.cond = 'value'
                AND usertable.name = 'namevalue'
  LEFT JOIN fielddata ON fielddata.id = usertable.id