MySQL - INSERT INTO ... SELECT ... UNION

Mik*_*ell 2 mysql insert union

我遇到了一个相当复杂的查询问题,我需要将一个表中的 id(基于重标准)存储到一个狭窄的备用表中以供将来参考,但我一直遇到错误的 sql 构造错误。

如果我自己运行以下查询,它可以正常工作:

(SELECT DISTINCT a.id FROM accounts AS a
WHERE a.createdate >= date_sub(now(), INTERVAL 1 YEAR)
AND a.email NOT LIKE '%gmail.com')
UNION DISTINCT
(SELECT DISTINCT a.id FROM accounts AS a
WHERE a.createdate < date_sub(now(), INTERVAL 1 YEAR)
AND a.email NOT LIKE '%yahoo.com') AND a.email NOT IN
(SELECT email FROM inactive_clients));
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试像这样运行相同的查询:

INSERT INTO my_backup_table (account_id) VALUES ($aboveQuery);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

MySQL server version for the right syntax to use near 'UNION DISTINCT (SELECT DISTINCT a.id FROM accounts at line 1
Run Code Online (Sandbox Code Playgroud)

我尝试了任意数量的括号排列,但仍然收到相同的错误。

Rol*_*DBA 5

您不能使用INSERT INTO tblname (...) VALUES ...语法

您必须使用INSERT INTO tblname (...) SELECT ...语法

尝试以下操作:

INSERT INTO my_backup_table (account_id)
SELECT id FROM
(
    (SELECT DISTINCT a.id FROM accounts AS a
    WHERE a.createdate >= date_sub(now(), INTERVAL 1 YEAR)
    AND a.email NOT LIKE '%gmail.com')
    UNION DISTINCT
    (SELECT DISTINCT a.id FROM accounts AS a
    WHERE a.createdate < date_sub(now(), INTERVAL 1 YEAR)
    AND a.email NOT LIKE '%yahoo.com') AND a.email NOT IN
    (SELECT email FROM inactive_clients))
) A;
Run Code Online (Sandbox Code Playgroud)